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

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

领取文章中的《垃圾回收的算法与实现》,只需要:

——可以点击此处来获取就可以了!

相关文章
|
3月前
|
存储 人工智能 编解码
AI 消灭软件工程师?| 新程序员
AI 是否会取代软件工程师”是自大模型爆火以来程序员们最为关心的一大话题,事关编程的未来与我们每一位程序员。本文作者 Babel CEO、多年的资深程序员张海龙深入技术本质,为我们进行了答疑解惑。本文转载自CSDN:https://mp.weixin.qq.com/s/omx6B80D9Uz4mfnM8dvDeg。自从大模型出现以来,程序员界人人自危,这篇文章也是很好的解答了大家的一些困惑,分享一起学习。
|
11月前
|
人工智能 自然语言处理 安全
AI卷趴程序员!DeepMind祭出竞赛级代码生成系统AlphaCode,超越近半码农
AI卷趴程序员!DeepMind祭出竞赛级代码生成系统AlphaCode,超越近半码农
|
人工智能 架构师 程序员
十年老友记 | @边城:恰当的编程是会产生幸福感的
十年老友记 | @边城:恰当的编程是会产生幸福感的
140 0
|
安全 数据挖掘 计算机视觉
一场直播帮你揭开保险代打卡背后的“猫腻”
你以为代打卡是在为打工人谋福利,事实上却成为了黑灰产的揽财工具。
208 0
一场直播帮你揭开保险代打卡背后的“猫腻”
|
程序员 数据库
“科班出身”的程序员和“培训出身”的程序员的大型辩论(甩锅)现场
前几天阿粉说阿粉最近换了公司,而且入职之后干掉了公司里面的测试数据库的事情,而接下来的事就比较有意思了,来自“科班出身”的哥们和来自“培训出身”的我的大型辩论(SIBI)现场,也不能说是通俗的甩锅,但是确实有那么点意味。
“科班出身”的程序员和“培训出身”的程序员的大型辩论(甩锅)现场
|
人工智能 搜索推荐 大数据
心脑血管疾病被两会重点关注,谈谈AI能帮点儿什么?
2019年2月7日,武汉某医院急诊科,武汉理工大学职工黄先生(化名)因为胸痛在值班医生的安排下刚刚做完心脏CT,正在焦急等待结果。
心脑血管疾病被两会重点关注,谈谈AI能帮点儿什么?
|
测试技术 C++ 芯片
崮德好文连载 - 8个影响我职业生涯的重要技能
们的教育方式,注定了大部分人都是解决问题的高手,每次考试,我们的目标就是拿100分,从ABCD中选择中选择正确的答案,反而很少有人想,我们为什么要学这些知识,这些知识未来有什么用?或者想想这个数学公式是怎么来?有没有更简洁的表达方式呢?有没有其他没有发现的更好的解决方案呢?或者怎么提高学习效率?怎么让自己既学的好,又学的轻松呢?在我整个学生生涯,我的脑子里整天充满了这些问题,我觉得就是这样的思考习惯,让我成为一个善于提出问题的“好”学生。
崮德好文连载 - 8个影响我职业生涯的重要技能
|
Java 应用服务中间件 开发工具
很多未解之谜终于有答案了——2018年JVM生态系统报告出炉
在Java开发者中,一直存在着很多鄙视链。如: IntelliJ → Eclipse → NetBeans Unix → Linux → Mac OS→ Windows → DOS Emacs → Vim → Sublime → Word → Powe...
1005 0
埋头苦学就会快速超神吗?高效人士学习计划里面竟有一项是娱乐?
埋头苦学就会快速超神吗? 我觉得不一定,我相信世界上一切事物都有套路,搞清套路才是关键,学设计亦如此,总结其中套路,而不是学完就完。 很多人可能会认为,那些学习能力强的人会不会是那种埋头苦学的“学习狂”,其实埋头苦学是最不科学的一种做法。
1020 0