关于 ARC 和 GC 两种不同内存回收方式 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yunbaIO
V2EX    程序员

关于 ARC 和 GC 两种不同内存回收方式

  •  
  •   yunbaIO 2016-08-19 14:15:17 +08:00 5835 次点击
    这是一个创建于 3344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    #云巴技术干货#

    分享一篇我司 CEO 大大 @Tiger_张虎 撰写的关于 ARC 和 GC 两种不同内存回收方式的文章。

    原链接戳: http://zhang.hu/arc-vs-gc/

    18 条回复    2016-08-24 02:04:15 +08:00
    owt5008137
        1
    owt5008137  
       2016-08-19 17:21:53 +08:00 via Android
    很多细节解释得有问题,排版不错
    allenforrest
        2
    allenforrest  
       2016-08-19 17:50:17 +08:00   1
    说实话我看到 「 Object C 」 我就关掉页面了,过了一会儿,想想还是要尊重一下,继续打开看完了。
    觉得写的还不错,但是说实话营养和干货并不多。
    blahgeek
        3
    blahgeek  
       2016-08-19 17:53:44 +08:00
    本来就这样一篇普通的文章的话…虽然没啥干货 不过看看也无妨… 不过还非得强调 CEO 一下子对这个公司和这个人的好感度都降低了…
    shimanooo
        4
    shimanooo  
       2016-08-19 18:06:23 +08:00
    ARC 最关键的环状引用、多线程竞争没说。
    hyyy
        5
    hyyy  
       2016-08-19 18:06:32 +08:00
    还以为是个技术分享,没想到就这么点东西,干货太少, CEO 三个字母就别发了,影响不好。
    owt5008137
        6
    owt5008137  
       2016-08-19 21:05:08 +08:00 via Android
    @shimanooo 这也是我觉得细节有问题的地方之一。

    而且 GC 是个宽泛的概念,看这篇文章说得所谓 GC 似乎指的是类似标记删除的方法
    mathgl
        7
    mathgl  
       2016-08-19 21:14:18 +08:00
    @shimanooo arc 现在一般靠 weak ptr 来解决,不过如果相互关系很复杂,就要把 ownership 考虑得比较细致,实现起来也颇为麻烦。
    FrankHB
        8
    FrankHB  
       2016-08-20 10:17:53 +08:00
    RC 和 tracing GC 都是 1959 年发明的。现在一些 GC 也基于 RC ,但典型 GC 的主要指后者。
    想要从大局对比,去掉 A ,谢谢。 ARC 是什么年代的东西了……而且讲真,离“广泛采用”(不是看你用户数,而是看用在多少解决方案里即便现阶段看用户数也一样)差远了。然后才发现,文章里讲的似乎就是 RC 而不是 OC/Swift 的那种 ARC 。
    (虽然从字面上讲, C++那套才更有资格当成 A 。)
    FrankHB
        9
    FrankHB  
       2016-08-20 10:25:31 +08:00
    @shimanooo @mathgl 影响选取哪种 weak ptr 的 ownership 基本上本来就是应该最晚在详细设计时确定清楚的东西,不应该拖到实现的时候临时添乱。如果最后还发现引用环,说明设计有问题。
    GC 实际上是把明确责任也延迟了,所以容易玩脱。
    至于竞争,还是一点:注意粒度,避免不必要的可修改共享资源。 RC 也没什么特别的,无非就是更强调考虑造成(伪)共享是不是合适而已。设计时避免不了 aliasing 的那就老实 sharing ,实现后发现瓶颈再考虑是不是改用 GC 或者池来优化。
    canautumn
        10
    canautumn  
       2016-08-20 13:23:50 +08:00
    Object A, Object B, ObjectC 凑齐了
    hinkal
        11
    hinkal  
       2016-08-20 14:35:06 +08:00 via Android
    arc 概念说的真的对吗, gc 也可以用引用计数的啊
    8bit
        12
    8bit  
       2016-08-20 17:32:28 +08:00
    感觉就是一碗稀汤
    snnn
        13
    snnn  
       2016-08-20 20:38:58 +08:00
    "支持 GC 的平台里面有一个特殊的,就是 Erlang 。 Erlang 的 GC 是进程级别的,意味着 GC 发生时,只暂停当前进程" 看到这句话我要吐了。知道啥叫进程吗?
    coreS
        14
    coreS  
       2016-08-21 14:10:09 +08:0 via iPhone
    理解太表面了,算不上干货
    tigerz
        15
    tigerz  
       2016-08-24 01:58:38 +08:00
    早听说 V2EX 上面多无脑喷,果然。

    指出文章错误的我本人来一一回答一下,无脑喷的自动忽略。
    tigerz
        16
    tigerz  
       2016-08-24 01:58:56 +08:00
    @allenforrest 笔误已经修改
    tigerz
        17
    tigerz  
       2016-08-24 02:02:14 +08:00
    @FrankHB ARC 的确是比较新的技术,但从 C++11/Rust 看来是一个很重要的发展方向。
    而单纯的 RC 其实很跟 GC 比较起来意义不是太多,编程效率提升非常有限。
    tigerz
        18
    tigerz  
       2016-08-24 02:04:15 +08:00
    @snnn 你如果懂 Erlang 的进程,就知道我在说什么。 Erlang 的进程是虚拟机上实现的轻量级进程,不同于操作系统的进程。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5154 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 03:49 PVG 11:49 LAX 20:49 JFK 23:49
    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