可达性分析算法

可达性分析算法

通过GC Roots的对象为起点,向下搜索,能到达的对象为不可回收对象,不能到达的对象为需要回收的对象。Java中就是通过可达性分析算法来判定对象是否存活的。

GC Roots的对象

1)、方法区中常量引用的对象;

2)、方法区中类静态属性(static修饰)引用的对象;

3)、虚拟机栈(本地变量表)中引用的对象(正在被使用);

4)、本地方法栈(native修饰方法)中引用的对象;

图解

如下图,a~h均为对象,通过GC Roots向下搜索,可以到达的对象为a、b、d、f,所以a、b、d、f为不可回收对象,其他的均为可回收对象。 

可达性分析算法

 

 

如果有写的不对的地方,请大家多多批评指正,非常感谢!