GC之引用计数算法

我们都知道c++程序在创建对象时需要构造函数为对象开辟空间,该对象不再使用时需要手动写析构函数释放空间。但Java因为实现了垃圾回收机制,程序员不需要手动的去释放对象空间。

不同的厂商采用不同的算法实现GC

引用计数算法

引用计数算法是为每个对象一个计数器用来保存对象被引用的次数,如果该对象被其他对象引用,计数器加1,对该对象引用结束则计数器减1,当计数器为0时认为该对象已经没有任何引用,就会被回收。

String str = new String("gc");
str = null;

在这里插入图片描述
在这里插入图片描述
如图,当str设置为null时,gc的引用次数为0,将被回收

但引用计数法会出现循环依赖问题

public  class  MyClass {
	public Object instance;
}

MyClass c1 = new MyClass();
MyClass c2 = new MyClass();

c1.instance = c2;
c2.instance = c1;

c1 = null;
c2 = null;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时两个instance互相引用,计数器一直为1,GC永远无法回收它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值