判断对象是否存活的算法

         许多教科书来判断对象师傅偶存活的算法是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1;当引用失效时,计数器的值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

           上面这个算法叫做“引用计数算法”,实现简单,判定效率高昂,但是无法解决对象之间相互循环引用的问题。

例如:

           MyClass referenceA=new MyClass();

           MyClass referenceB=new MyClass();

           referenceA.instance=referenceB;

           referenceB.instance=referenceA;

           referenceA=null;

           referenceB=null;

           System.gc();

以上代码执行之后,虚拟机并没有因为这两个对象相互引用就不回收他们,说明虚拟机不是通过引用计数算法判断对象存活的。

其实虚拟机是采用可达性分析算法来判断对象死活的。

例如:



 

对象object5,object6,object7虽然相互有关联,但是他们到GC ROOTS是不可达的,所以他们将会被判定为是可回收的对象。

猜你喜欢

转载自wjy320.iteye.com/blog/2029796