图解GC(垃圾回收)标记-压缩算法

标记-压缩算法是一种垃圾回收策略,类似复制算法但不牺牲空间。它包括标记、设定forwarding指针、更新指针和移动对象四个步骤。在Lisp2算法中,每个对象头有forwarding指针指示新位置。该算法执行时间与堆大小成正比,提高堆空间利用率,但需三次搜索。
摘要由CSDN通过智能技术生成

标记-压缩算法顾名思义,就是标记活动对象,再对活动对象进行压缩到堆的一边,两部分组成。标记-压缩算法效果和复制算法差不多,但是有点在于他不用牺牲半个堆的空间。

首先,我们介绍最初由Kunth研究出来的标记-压缩算法Lisp2

Lisp2

lisp2算法中每个对象头中都开辟新空间用来存放forwarding指针。forwarding指针用来指示活动对象将要被压缩过去的空间地址。

算法首先是标记阶段,标记和之前标记-清除算法的标记一样,这里不再赘述,标记完成后堆的状态如图:

算法第一步:设定forwarding指针。算法中存在两个指针scan,new_address。

scan:用来扫描堆中的对象。

new_address:寻找空闲空间并且用来指示对象新的目标地点。

第一步中,scan用来扫描对象,一旦找到活动的对象就会将对象中forwarding指针从NULL跟新到new_address的地址。第一步完成后,结果如下图

第二步:更新指针。第一步指定活动对象将被移动后的新地址后,这一步将由SCAN指针继续扫描,更新所有活动对象的指针,包括根指到对象新地址的指针和对象间引用的指针。第二步完成后如图:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大学一年级

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

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

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

打赏作者

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

抵扣说明:

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

余额充值