Garbage Collection | 节点复制算法

节点复制算法


这次考察的也是一种基于追踪的算法:节点复制算法。节点复制式收集器将整个堆等分成为两个半区(semi-space),一个包含现有的数据,另一个包含已被废弃的数据,节点复制式垃圾收集从filp两个半区的角色开始。然后收集器在老的半区,也就是Fromspace中遍历存活的苏话剧结构,在第一次访问某个单元时把它复制到新的半区,也就是Tospace中去。在Fromspace中所有存活单元都被访问过之后,收集器在Tospace中建立了一个存活数据结构的副本,用户程序可以重新开始运行了,由于垃圾单元只是简单地被废弃在Fromspace中,人们常常把节点复制式收集器描述为“清道夫”:它们从垃圾中捡起有价值的对象并把对象带走。

节点复垃圾收集天生就具有一个有益的副作用:u哦有存活的数据结构都缩并地拍额在Tospace的底部。与那些存在内存碎片问题的收集器相比,缩并的收集器能能否更高效的分配对象。New过程只需要检查有没有足够的空间,然后在递增指向自由空间开始处的指针free。由于存活数据在Tospcae中式缩并的,检查空间是否足够仅仅只是一个指针比较而已。节点复制式收集器能够自然地处理可变大小的对象,因此我们把对象的大小作为参数n传递给New过程。和Mark-Sweep技术一样,节点复制技术不会给像更新这样的用户程序操作带来外的负担。

//节点复制式收集器中的分配
init() =
    Tospace = Heap_bottom
    space_size = Heap_size / 2
    top_of_space = Tospace
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值