确定性唯一强引用链 gc 算法。 这算法成立吗?

2021-08-29 18:57:38 +08:00
 zhigewuwang

有可能成立的新 GC 算法,欢迎大家讨论

每个值,记录引用与被引用关系。 被引用关系中,只有一个是强引用,其他全是弱引用。 由值的引用关系图中,对于一个值,有且只有一种强引用链直通到根。

其中直线是强引用,虚线是弱引用

当弱引用断掉后,不需要做处理。 当强引用断掉后, 将该引用链后段的所有强引用全部置为弱引用,并将涉及到的值都记录起来, 记为 tmp_values

此时 tmp_values 中的所有值都只存在弱引用关系。 如下图所示( A->C 的引用断掉):

遍历 tmp_values,寻找被引用关系的上级,该上级带有强引用, 如果没有找到,就跳过。 如果有找到,就更新该被引用关系为强引用。

再次遍历 tmp_values 如果当前 tmp_value 带有强引用, 则从它出发的所有只有弱引用的值,都将引用更新为强引用。如下图所示,绿色的强引用是重新寻找到的强引用:

再次遍历 tmp_values 删除所有未带有强引用的值,如下图所示:

gc 完成。

比喻

每个人在一家公司里都要站队,如果上司倒了,就重新站队(要被使用),重新站队后,你下属的链就保全了。
没能重新站队的人,就被 fire 了

优势

不足

1008 次点击
所在节点    算法
1 条回复
zhigewuwang
2021-08-30 14:44:18 +08:00
有没有讨论的呀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/798689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX