部分标记-清除法
之前加说,结合标记-清除算法可以解决引用计数法不能解决循环垃圾的问题,但是标记清除-算法从标记再到清除两次遍历虽然解决了问题但是同时也毁灭了引用标记法的优点。
这里我们介绍部分标记-清除算法来解决循环的问题。典型的标记-清除算法用来查找活动对象,而使用部分标记-清除算法用来查找不活动的对象。
这个算法的伟大之处在于判断图的循环问题。(图的循环老生常谈,我们知道有标记,快慢指针算法等等等等算法。)这里我们具体问题具体分析,采用一种另外一种更合适的伟大算法。
算法为每个对象设置了2b分别用来表示,黑,白,灰,阴影,四种状态。其中,
黑:绝对不是垃圾
白:绝对是垃圾
灰:搜索完毕的对象
阴影:可能是循环垃圾
我们以下图为例子:

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

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

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

被折叠的 条评论
为什么被折叠?



