关于引用计数法的循环引用问题

现在JVM大多不采用引用计数法 进行GC,很大程度上是因为引用计数法不能解决循环引用的问题。
如下代码

public class TestClass {

    private Object ref;

    public static void main(String[] args) {

        TestClass o1 = new TestClass(); // 1
        TestClass o2 = new TestClass(); // 2
        o1.ref = o2;					// 3
        o2.ref = o1;					// 4
        o1 = null;						// 5
        o2 = null;						// 6
    }
}

刚开始接触编程的童鞋可能不是很明白,可以看下图
代码执行完第二行时候,对象在内存中是这样分布的
在这里插入图片描述

执行完第四行后是这样
在这里插入图片描述
执行到最后
在这里插入图片描述
此时对象1跟对象2的引用计数都不为0,但我们已经无法通过代码的方式来使他们的引用计数归0,这两个对象也就无法被回收。
现在JVM大多采用 可达性分析算法分析是否回收对象。


版权声明:本文为weixin_45207388原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。