Java中如何判断对象存活

1.引用计数法

给对象添加一个计数器,如果被引用则计数器加一;如果引用释放,计数器减一。当计数器为零时,代表该对象没有被引用那就需要回收了。如果两个对象互相引用怎么办?比如A引用了B,B又引用了A,A.reference=B;B.reference=A,那就无法释放。因此该算法未被采用。

2.可达性分析

从GCRoots对象出发,向下查找对象,查找的路径叫引用链,如果查找的对象到GCRoots没有任何引用链,那该对象是不可用的就可以被回收。

 

 如图,Object4到GCRoots不存在引用链,故不可用,需要回收。

可以作为GCRoots的对象包括以下几种

1.虚拟机栈局部变量表中引用的对象;

2.本地方法栈局部变量表中引用的对象;

3.方法区中静态属性引用的对象;

4.方法区中常量引用的对象。

局部变量表中的引用的对象

posted @ 2019-12-10 13:54  井井井  阅读(275)  评论(0编辑  收藏  举报