作者:RednaxelaFX(莫枢)
链接:https://www.zhihu.com/question/39337535/answer/80884071
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

关于R神

莫枢,现就职于Azul Systems参与Zing JVM的JIT编译器研发。曾就职Oracle与阿里巴巴参与HotSpot VM的研发。热爱编程语言的设计与实现,喜欢学习和鼓捣各种编程语言,对托管运行时的设计与实现有深入了解。常用网名RednaxelaFX。


嗯,这本书的中文版快出了,真是欣慰!

原版刚出的时候我就赶紧在日本Amazon上买了。后来達人出版会发行了这本书的电子版,我还又买了一次电子版以表支持。

关于中村成洋

中村成洋大大的Twitter账号是@nari3(日文)和@nari_en(英文)。个人网站(包括博客)在narihiro.info。他的工作中我所关注的部分是他对CRuby的GC的改进,例如CRuby 1.9的lazy sweep、CRuby 2.0的bitmap marking等。

感觉他是个平易近人的程序员,跟他讨论问题时氛围总是轻松活泼的。

他好学且勤于实践。跟许多其他日本程序员一样,他乐于并擅长阅读开源代码,并且记下学习笔记。

《垃圾回收的算法与实现》书中,源码剖析(“实现”)的部分主要是中村大大写的。原本这本书还计划包含对G1 GC的源码剖析,但时间和篇幅实在是安排不下,他就另外通过達人出版会出版了G1 GC源码剖析的上下两册书:

关于这本书

原版是「ガベージコレクションのアルゴリズムと実装」,中文版由图灵引进,译者是丁灵。

我在自己的几个书单里都有放这本书:
[Garbage Collection][垃圾回收][自动无用内存单元回收]相关读物
从表到里学习JVM实现

从入门到进阶阅读学习GC知识,这本可以作为第一本书;后面接上老的 Garbage Collection 也行,或者跳过这本老的直接到 The Garbage Collection Handbook 亦可。

这本书覆盖了老 Garbage Collection 书的大部分基本算法和变种介绍,如果不是特别想考古或者说想把GC领域的历史都挖出来看看的话,就可以跳过这本老书了。

这本书所覆盖的内容,看目录就一目了然了:


目次 - ガベージコレクションのアルゴリズムと実装 [単行本] - Amazon.co.jp
序章
アルゴリズム編
第1章 GCを学ぶ前に
第2章 マークスイープGC(Mark Sweep GC)
第3章 参照カウント(Reference Counting)
第4章 コピーGC(Copying GC)
第5章 マークコンパクトGC(Mark Compact GC)
第6章 保守的GC(Conservative GC)
第7章 世代別GC(Generational GC)
第8章 インクリメンタルGC(Incremental GC)
実装編
第9章 PythonのGC
第10章 DalvikVMのGC
第11章 RubiniusのGC
第12章 V8のGC
補遺


中文版里,原作者之一的相川光还专门在算法篇新加了一章讲RC Immix的,一种结合tracing与引用计数的新算法。作者太好人了 >_<


版权声明
审校者前言
前言 阅读
谢辞 阅读
本书评论
序章
算法篇
第 1 章 学习 GC 之前
第 2 章 GC 标记 - 清除算法
第 3 章 引用计数法
第 4 章 GC 复制算法
第 5 章 GC 标记 - 压缩算法
第 6 章 保守式 GC
第 7 章 分代垃圾回收
第 8 章 增量式垃圾回收
第 9 章 RC Immix 算法
实现篇
第 10 章 Python 的垃圾回收
第 11 章 DalvikVM 的垃圾回收
第 12 章 Rubinius 的垃圾回收
第 13 章 V8 的垃圾回收
附录
后记
参考文献


其中实现篇里介绍的GC,具体是:

  • Python 3.0.1。其引用计数以及备份的mark-sweep GC(所谓Cycle GC)都有介绍。在讲解GC的概念与思路上,这章比《Python源码剖析》写得好。

  • Dalvik VM Android 1.5r2 (Cupcake)版。重点是:分块的GC堆、mark-sweep GC、bitmap marking。
    当然,现在看来这是比较老的Dalvik VM,后来新加的并发GC(Concurrent Mark-Swep)、copying GC都没有介绍。

  • Rubinius,基本上反映了1.0.0版的状况。Rubinius的GC是分代式的,young gen为copying GC,old gen为Immix GC。本书的源码剖析只着重介绍了其young gen的实现,以及准确式GC的实现方式。

  • V8 1.3.13.5。重点是:GC堆的划分、tagged pointer、准确式GC的实现、old gen的mark-compact。
    这从现在看来也很老了。后来的V8的GC发展得相当复杂,不过要追根溯源还是能找到跟早期版本相似的基本思路。

这样,4个实现就分别覆盖了引用计数、mark-sweep、copying与mark-compact算法在实际VM中的实现与应用。理论结合了实际。

优缺点

我特别推荐《垃圾回收的算法与实现》,求出版社引进中文版,是因为它非常适合用于入门。它既系统的介绍了GC的经典基础算法(及其若干变种),又贴近现实剖析了一些实用系统中的GC实现,在抽象与具体,理论与实现之间找到了一个不错的平衡。

有不少着眼入门水平的书在这种平衡点上就拿捏得不好:

  • 要么通篇理论,过于抽象,难以结合代码形象的理解,读完书还是实现不出东西来;
  • 么过于注重单一特定的简单实现,缺乏大局观,难以让读者有效的萃取出重点思路举一反三泛化到理解整个领域。

而且这本书通篇的记述都配合着大量形象的插图,非常有助于读者理解其相关文字描述。

要说读得不过瘾的地方,那就是算法篇中对GC知识的系统性把握还是不如 The Garbage Collection Handbook ;而实现篇中剖析的对象从现在的角度看版本偏老,而且有些系统实现得复杂的地方被略过了(例如分析Rubinius的GC时只分析了young gen的copying GC,而没有分析old gen的Immix GC),读完真恨不得给它加几个小章节…

但即便如此,这本书既授人以鱼,也授人以渔,读者了解了分析代码的思路后,结合算法篇里对领域的介绍,要去阅读其它GC实现的源码也就会有头绪了。所以那些缺失的源码剖析,就算是留给读者的习题吧(>_<