乐趣区

关于java:牛皮了世界级调优大师以上古传承之魔法彻底揭开GC的秘密

开篇水一水

计算机的提高,特地是硬件的倒退之快总是让咱们感到诧异。在这波一直向前涌动的洪流中,技术畛域的浮沉也愈发强烈。本书波及的垃圾回收 (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 篇

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

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

退出移动版