确定性唯一强引用链 gc 算法。 这算法成立吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhigewuwang

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

  •  
  •   zhigewuwang Aug 29, 2021 1701 views
    This topic created in 1701 days ago, the information mentioned may be changed or developed.

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

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

    值引用图

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

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

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

    A->C 的引用断掉,该引用链后段所有的强引用全部置为弱引用

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

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

    image.png

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

    唯一强引用链重建,只有弱引用的 C 、G 、D 都将被删除

    gc 完成。

    比喻

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

    优势

    • 引用关系掉后,垃圾数据立刻被清掉,没有 mark-and-sweap gc 算法的延迟。
    • 因为是立即清掉垃圾数据,所以内存也不会被无效数据占掉
    • 因为是立即清掉垃圾数据,所以也不需要 stop-the-world
    • 因为是立即清掉垃圾数据,所以也可以做 RAII
    • 相比引用计数,没有循环引用的问题,因为同时最多一个强引用

    不足

    • 相比 mark-and-sweap gc 要多记录 被引用关系来重建强引用
    • 清理时,需要遍历强引用链后段数据三次
    zhigewuwang
        1
    zhigewuwang  
    OP
       Aug 30, 2021
    有没有讨论的呀
    About     Help     Advertise     Blog     API     FAQ     Solana     906 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 22:12 PVG 06:12 LAX 15:12 JFK 18:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86