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

现在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大多采用 可达性分析算法分析是否回收对象。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值