GC(垃圾回收)准确式垃圾回收算法

准确式GC

准确式GC和保守式GC的不同点在于,准确式GC能准确识别指针和非指针来经行垃圾回收。创建正确的根有多种方式,但是这些都需要语言处理程序的支援。

方法一:打标签

打标签的目的在于明确的对根里所有的指针和非指针明确的区分开来。我们以最基本的第一位作为标签的方法。在32bCPU下,指针的值是4的倍数,低2位一定是0,我们利用这特性具体打标签的方法如下:

1,将非指针(如int)左移一位

2,将低1位至为1

注意:在对数值也就是非指针左移时注意不要让数值溢出,若发生溢出则换位更大的数据类型,例如Int换位Long

这里打标签这两步都是由语言处理程序处理的。根据打完这个表情GC就可以精准的识别根里指针和非指针变量。但是除了识别变量,在计算时必须将数据还原,也就是取消标签。

方法二:不把寄存器和栈当作根。上文提到,寄存器和调用栈里存在的都是不明确的根,我们这里都不把寄存器和栈当作根就可以省去很多麻烦。这种方法似乎有点投机取巧,解决不了问题就避免问题的感觉,但是事实上很有用,许多语言也利用这种方法例如:Rubiniius。

准确式GC可以精准识别指针,GC之后堆只剩活动的对象。此外,复制等移动算法都依赖准确式GC。缺点:是语言处理程序的支援,对应保守式简单的优点这里就是麻烦,并且例如打标签和取消标签这就影响语言处理程序整体速度。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学一年级

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值