Stop and copy 垃圾回收器

停止然后复制(下面简写成 “止复”)是一另种消除碎片的垃圾回收技术。

步骤是把可用内存一分为二。一半等待,一半操作。当这一半的内存必须要进行垃圾回收时,回收器会从根指针开始遍历堆。

对于每个遍历到的节点,把他们复制到等待的那一半内存里。通过一种特殊技术保持 links 有效。

复制完成后,等待堆和操作堆角色互换。

过程中,所有无法触及的节点都会留在现在的等待堆。

止复的开始:在等待堆(tospace)新建两个指针,写指针和读指针。以及两个过程,疏散(evacuation)和 清除(scavenging)。开始是疏散根对象。然后清除。

疏散:将对象复制到写指针,写指针前进。然后在对象的旧地址(fromspace 上),新建一个中继对象,也叫破碎的心(broken heart),包含对象的新地址。

清除:读指针会检查 tospace 上对象里的指针。如果某个指针指向 fromspace 上的对象x,那个x就会被疏散。如果指向一个破碎的心,那就把指针地址改成新地址。对象完成清除,读指针前进。

一个对象被清除,意味着更多的对象被疏散,最终全部对象也被清除。最终在读指针和写指针相遇时,止复完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值