开篇水一水

计算机的提高,特地是硬件的倒退之快总是让咱们感到诧异。在这波一直向前涌动的洪流中,技术畛域的浮沉也愈发强烈。本书波及的垃圾回收(Garbage Collection, GC)与其说是实践,其实更偏差技术层面,然而它却有着令人吃惊的漫长历史。GC在计算机倒退的洪流中没有浮起,也没有沉下。直到1995年Java公布,因为其内藏GC,人们才开始意识到GC的作用。

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

如果看看某本教科书中的一节或者读读几篇论文 就能明确GC是什么货色, 那么或者就不须要这本书了,但GC并没有那么简略。

因为Java的呈现,人们开始广泛意识到GC的可贵,自此少数的脚本语言都具备了GC。看到这种情景,我这个跟GC拉拉扯扯了近40年的人真是感慨万千。尽管没有什么切实的依据,然而我始终认为,具备GC的语言要比不具备GC的等同语言生产效率高百分之三十。

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

要说本书与涵盖面较广的GarbageCollection有什么不同,那就是本书波及的面不那么广,但“算法篇”中对GC的根底内容进行了详实的解说。另外,“实现篇”是本书的一大特色,其中解读了理论的GC代码。总体而言,本书作为一本教科书有着教育和现实意义。

那么,上面咱们就从目录、次要包含的内容和总结三局部给大家进行GC的拓展学习,心愿大家可能喜爱!!

目录:

因为篇幅限度小编,小编只在这里给大家展现目录及局部内容,有须要残缺文档的程序猿(媛)能够帮忙转发+关注,点此获取

算法篇:共9章

1学习GC之前:本章中将为各位阐明GC中的基本概念。

2 GC标记-革除算法:世界上首个值得纪念的GC算法是GC标记-革除算法(Mark Sweep GC)”。自其问世以来,始终到半个世纪后的明天,它仍然是各种处理程序所用的平凡的算法。

3援用计数法:GC本来是一种“开释怎么都无奈被援用的对象的机制”。那么人们自然而然地就会想到,能够让所有对象当时记录下“有多少程序援用本人"。让各对象晓得本人的“人气指数",从而让没有人气的对象本人隐没,这就是援用计数法(Reference Counting),它是George E. Collins于1960年钻研进去的。

4 GC复制算法:GC复制算法(Copying GC )是Marvin L. Minsky在1963年钻研进去的算法。说得简略点,就是只把某个空间里的流动对象复制到其余空间,把原空间里的所有对象都回收掉。这是一个相当大胆的算法。在此,咱们将复制流动对象的原空间称为From空间,将粘贴流动对象的新空间称为To空间。

5 GC标记-压缩算法:GC标记-压缩算法(Mark Compact GC )是将GC标记-革除算法与GC复制算法相结合的产物,因而咱们要以第2章和第4章的内容为前提来向大家阐明。

6激进式GC:在此之前,咱们在“算法篇”中介绍了很多种GC算法。而要想在处理程序中实现这些算法,处理程序的开发者就必须首先抉择GC的品种。这里的品种指的是“激进式GC"和“精确式GC"

7分代垃圾回收:分代垃圾回收(Generational GC )在对象中导入了“年龄”的概念,通过优先回收容易成为垃圾的对象,进步垃圾回收的效率。

8增量式垃圾回收:增量式垃圾回收(Incremental GC )是一种通过逐步推动垃圾回收来管制mutator最大暂停工夫的办法。

9 RC Immix算法:本章将为大家介绍2013年由Rifat Shahriyar等人开发的RC Immix算法(ReferenceCounting Immix )27]。

实现篇:共4章

10 Python的垃圾回收:本章中将为大家讲解Python的垃圾回收是如何实现的。

11 DalvikVM的垃圾回收:本章将为大家介绍DalvikVM的垃圾回收。说到DalvikVM大家或者不相熟,但如果说“Google手机”上搭载的VM,大家就该有印象了吧。

12 Rubinius的垃圾回收:本章将为大家解说Rubinius这种语言处理程序的垃圾回收。Rubinius 属于为数不多的Ruby解决零碎中的一种。

13 V8的垃圾回收:本章中将为大家解说JavaScript 的语言处理程序——V8 的垃圾回收。

附录

附录A 简略语言入门: Python篇

附录B简略语言入门: Java篇

附录C简略语言入门: Ruby篇

附录D简略语言入门: JavaScript篇

支付文章中的《垃圾回收的算法与实现》,只须要:

——对文章将进行转发+评论,关注我之后点击这里获取即可。