图解GC(垃圾回收算法)加强版计数引用法(4)部分标记-清除法

部分标记-清除算法通过3次扫描解决循环垃圾问题,判断图的循环并避免传统标记-清除算法的高成本。该算法利用不同颜色状态(黑、白、灰、阴影)来标识对象,通过队列处理可能存在循环的对象,最终确定并清除垃圾对象。此方法虽有效,但额外的遍历增加了程序暂停时间。

部分标记-清除法

  之前加说,结合标记-清除算法可以解决引用计数法不能解决循环垃圾的问题,但是标记清除-算法从标记再到清除两次遍历虽然解决了问题但是同时也毁灭了引用标记法的优点。

这里我们介绍部分标记-清除算法来解决循环的问题。典型的标记-清除算法用来查找活动对象,而使用部分标记-清除算法用来查找不活动的对象。

   这个算法的伟大之处在于判断图的循环问题。(图的循环老生常谈,我们知道有标记,快慢指针算法等等等等算法。)这里我们具体问题具体分析,采用一种另外一种更合适的伟大算法。

算法为每个对象设置了2b分别用来表示,黑,白,灰,阴影,四种状态。其中,

黑:绝对不是垃圾

白:绝对是垃圾

灰:搜索完毕的对象

阴影:可能是循环垃圾

   我们以下图为例子:

 

  算法中判断从根出发的每个对象是否存在循环的问题。若删除从根到A 的引用,则A将被收入hatch_queue队列中,判断环从此开始。

  A加入hatch_queue队列后就被标记为阴影状态。首先我们先示范个片面的的做法或许能帮助大家理解该算法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大学一年级

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

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

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

打赏作者

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

抵扣说明:

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

余额充值