标记java对象是否存活

在java垃圾收集器对堆内存进行回收之前,需要判断哪些对象还存活着,哪些对象已经死去。

一、引用计数算法

        在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器值都为0的对象就是不可能再被使用的对象,该对象会被GC收集。

缺点:java中没有使用引用计数算法,原因是对象之间的循环引用很难解决。

二、根搜索算法

        根搜索算法的基本思路为:通过一系列的名为“GC Roots”的对象作为起始点,从起始点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

可以作为GC Roots的对象包含以下几种:

1.虚拟机栈(栈帧中的本地变量表)中引用的对象,

2.方法区中的类静态属性引用的对象,

3.方法区中的常量引用的对象,

4.本地方法栈中JNI(native方法)引用的对象

猜你喜欢

转载自350083890.iteye.com/blog/2354420
今日推荐