有可能成立的新 GC 算法,欢迎大家讨论
每个值,记录引用与被引用关系。 被引用关系中,只有一个是强引用,其他全是弱引用。 由值的引用关系图中,对于一个值,有且只有一种强引用链直通到根。
其中直线是强引用,虚线是弱引用
当弱引用断掉后,不需要做处理。 当强引用断掉后, 将该引用链后段的所有强引用全部置为弱引用,并将涉及到的值都记录起来, 记为 tmp_values
此时 tmp_values 中的所有值都只存在弱引用关系。 如下图所示( A->C 的引用断掉):
遍历 tmp_values,寻找被引用关系的上级,该上级带有强引用, 如果没有找到,就跳过。 如果有找到,就更新该被引用关系为强引用。
再次遍历 tmp_values 如果当前 tmp_value 带有强引用, 则从它出发的所有只有弱引用的值,都将引用更新为强引用。如下图所示,绿色的强引用是重新寻找到的强引用:
再次遍历 tmp_values 删除所有未带有强引用的值,如下图所示:
gc 完成。
每个人在一家公司里都要站队,如果上司倒了,就重新站队(要被使用),重新站队后,你下属的链就保全了。
没能重新站队的人,就被 fire 了
被引用关系
来重建强引用 1
zhigewuwang OP 有没有讨论的呀
|