GC Roots可达性分析以及GC Roots的对象

GC Roots可达性分析以及GC Roots的对象

可达性分析算法的基本思路就是通过一系列称为“GC Roots”的对象作为起点,从这些结点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的,为可回收对象。 图中,右边部分都是不可达的对象,都是可回收对象。

在Java语言中,可以作为GC Roots的对象包括以下几种:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象
  2. 方法区中类静态属性引用的对象
  3. 方法区中常量变量引用的对象
  4. 本地方法栈中JNI(即一般说的Native方法)引用的对象
  5. 活跃线程的引用对象