垃圾回收的算法与实现
上QQ阅读APP看书,第一时间看更新

审校者前言

计算机的进步,特别是硬件的发展之快总是让我们感到惊讶。在这波不断向前涌动的洪流中,技术领域的浮沉也愈发激烈。本书涉及的垃圾回收(Garbage Collection, GC)与其说是理论,其实更偏向技术层面,然而它却有着令人吃惊的漫长历史。GC在计算机发展的激流中没有浮起,也没有沉下。直到1995年Java发布,因为其内藏GC,人们才开始意识到GC的作用。

追溯Lisp语言的秘史我们会发现,GC这种让已经无法利用的内存实现自动再利用(可能称为“内存资源回收”更恰当)的技术,是于Lisp的设计开始约1年后,也就是1959年的夏天首次出现的。实现GC的是一个叫D. Edwards的人。至今已经经过了50多年的漫长岁月。

这期间人们进行了海量的研究和开发,与其相关的论文也堆积如山。这么说来,我也写过几篇关于GC的论文。然而让我吃惊的是,这么久以来竟然没有一本关于GC的教科书或专业书籍。英语界曾于1996年首次针对GC出版了一本Garbage Collection(Richard E. Jones、Rafael D. Lins著),这是37年来在GC领域的一次破天荒的壮举,本书也将其作为了参考文献。然而在日本,本书可以说是第一本用日语写的GC专业图书,可谓五十年磨一剑,在此也对年轻有为的二位作者致以深深的敬意。

如果看看某本教科书中的一节或者读读几篇论文就能明白GC是什么东西,那么或许就不需要这本书了,但GC并没有那么简单。在学习或工作中不得不使用GC的人,首先就必须看两三篇有名的论文,之后还要去研究那些可能与其有关的原著。也就是说,从某种意义上而言,最后还是需要自己去想很多东西。

尽管如此,还是有许多真心喜欢编程的人士,他们之中有一大群叫作GCLover的人。因为GC基本上没有什么教科书,所以这群人之间似乎有着一种地下组织般的团队意识。总而言之,对他们来说,GC是个非常有意思、充满乐趣的程序。你读过本书后就会明白,GC算法会根据自动内存回收所需的环境(机器、语言、应用等)的不同而不同。到具体的程序层面,GC则为程序员提供了一个最佳的游乐场所,令其尽情地发挥编程技巧,大展身手。事实上我也属于长年乐在其中的一份子。GC这东西很麻烦,但却是必需的。它就像一个幕后英雄,默默地做着贡献,用户并不会期待它变得显眼。但因为它进行的是幕后工作,所以编程老手们或许会为之心动。

如上所述,因为Java的出现,人们开始普遍认识到GC的可贵,自此多数的脚本语言都具备了GC。看到这种情形,我这个跟GC拉拉扯扯了近40年的人真是感慨万千。虽然没有什么切实的根据,但是我一直认为,具备GC的语言要比不具备GC的同等语言生产效率高百分之三十。

既然话说到这里了,我就再介绍一下我的个人看法吧。实际上,GC相当于虚拟内存。一般的虚拟内存技术是在较小的物理内存的基础上,利用辅助存储创造一片看上去很大的“虚拟”地址空间。也就是说,GC是扩大内存空间的技术,因此我称其为空间性虚拟存储。这样一来,GC就成了永久提供一次性存储空间的时间轴方向的时间性虚拟存储。神奇的是,比起称为“垃圾回收”,把GC称为“虚拟内存”令人感觉其重要了许多。当初人们根据计算机体系结构开发了许多关于空间性虚拟存储的支持,所以大部分的计算机都标配了空间性虚拟存储。只要硬件支持,GC性能就能稳步提升,然而现实情况是几乎没有支持GC的硬件,这不能不令人感到遗憾。

要说本书与涵盖面较广的Garbage Collection有什么不同,那就是本书涉及的面不那么广,但“算法篇”中对GC的基础内容进行了详实的讲解。另外,“实现篇”是本书的一大特色,其中解读了实际的GC代码。总体而言,本书作为一本教科书有着教育和现实意义。我作为本书审校者,全方位检查、琢磨了书中的内容,担保这是一本通俗易懂的书。我深信,本书作为一本GC专业图书,能让读者了解到GC是何物,体味到它的有趣之处以及它的重要性。

如果能让更多读者了解到GC的重要性,那么由硬件和OS支持GC的真的时间性虚拟存储总有一天会实现吧。这就是我发自肺腑想说的话。开拓新技术的原石正在滚滚前进哦!

东京大学情报理工学系研究科教授 竹内郁雄

2010年2月


注意

1.本书是作者个人的研究成果。

2.本书内容已经过严格的审查和勘误,如发现内容缺失、错误等,请以书面形式联络出版方。

3.关于运用本书内容所造成的任何结果,作译者及出版社不承担与上述两项无关的责任,敬请谅解。

4.未经出版方书面许可,不得擅自盗印本书内容。


关于商标

·本书中省略了®、©、等符号,敬请谅解。

·关于本书中涉及的程序名称、系统名称及CPU名称等,书中一律使用其最常用的称呼。

·一般情况下,本书中使用的程序名称、系统名称及CPU名称等为各公司的商标或注册商标。