新書推薦:
《
悬壶杂记全集:老中医多年临证经验总结(套装3册) 中医医案诊疗思路和处方药应用
》
售價:NT$
614.0
《
无法忍受谎言的人:一个调查记者的三十年
》
售價:NT$
290.0
《
战争社会学专论
》
售價:NT$
540.0
《
剑桥意大利戏剧史(剑桥世界戏剧史译丛)
》
售價:NT$
740.0
《
教育何用:重估教育的价值
》
售價:NT$
299.0
《
理想城市:环境与诗性
》
售價:NT$
390.0
《
大模型推荐系统:算法原理、代码实战与案例分析
》
售價:NT$
445.0
《
逆风翻盘 危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道
》
售價:NT$
625.0
|
編輯推薦: |
Ruby之父松本行弘推荐:上古传承之魔法,彻底揭开垃圾回收的秘密!日本天才程序员兼LISP黑客竹内郁雄审校254幅图解,轻松掌握GC经典算法实际源码剖析,深入探讨GC具体实现从入门到进阶,一本书掌握自动内存回收的机制!1.全面涵盖GC经典算法 标记-清除算法、引用计数法、复制算法、标记-压缩算法、保守式GC、分代GC、增量式GC、RC Immix算法,一网打尽! 2.理论结合实际 在系统介绍GC算法的基础上,重点解读Python、DalvikVM、Rubinius、V8等几种实用系统中的GC代码,探究GC算法的实际应用,做到了理论和实际的平衡统一。3.图文直观、讲解细致 配合大量形象的插图和代码,将各个知识点掰开揉碎讲解,非常适合入门学习。
|
內容簡介: |
本书分为算法篇和实现篇两大部分。算法篇介绍了标记-清除算法、引用计数法、复制算法、标记-压缩算法、保守式GC、分代垃圾回收、增量式垃圾回收、RC Immix算法等几种重要的算法;实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理程序中的具体实现。
|
關於作者: |
中村成洋
Network Applied Communication Laboratory
Ltd. 研究员。
因为偶然的机会对GC产生浓厚兴趣,其本人却说不清楚为何喜欢GC,当被人追问原因时,总是回答是缘分。现在是CRuby的commiter,每天致力于GC的改善。
执笔本书实现篇。
相川光
游戏开发者。
京都大学在学期间开始研究GC。热爱GC但讨厌打扫。除了GC之外还喜欢咖喱。
执笔本书算法篇。
竹内郁雄(审校)
东京大学名誉教授。
热爱对象,甚至会给因为bug没能得到重复利用而死去(释放)的对象上供。
日本著名的Lisp黑客,著有《LISP入门》(初めての人のためのLISP)。
|
目錄:
|
序章
GC的定义 1
GC的好处 2
GC的历史 3
为什么我们现在要学GC 4
读者对象 6
本书中的符号 7
算法篇
第1章 学习GC之前
1.1 对象头域 12
1.2 指针 14
1.3 mutator 15
1.4 堆 15
1.5 活动对象非活动对象 16
1.6 分配 16
1.7 分块 17
1.8 根 17
1.9 评价标准 19
第2章 GC标记-清除算法
2.1 什么是GC标记-清除算法 22
2.2 优点 29
2.3 缺点 29
2.4 多个空闲链表 31
2.5 BiBOP法 33
2.6 位图标记 34
2.7 延迟清除法 37
第3章 引用计数法
3.1 引用计数的算法 40
3.2 优点 44
3.3 缺点 44
3.4 延迟引用计数法 46
3.5 Sticky引用计数法 50
3.6 1位引用计数法 52
3.7 部分标记-清除算法 55
第4章 GC复制算法
4.1 什么是GC复制算法 66
4.2 优点 73
4.3 缺点 74
4.4 Cheney的GC复制算法 74
4.5 近似深度优先搜索方法 78
4.6 多空间复制算法 83
第5章 GC标记-压缩算法
5.1 什么是GC标记-压缩算法 89
5.2 优点 94
5.3 缺点 95
5.4 Two-Finger算法 95
5.5 表格算法 100
5.6 ImmixGC算法 106
第6章 保守式GC
6.1 什么是保守式GC 119
6.2 优点 122
6.3 缺点 122
6.4 准确式GC 123
6.5 间接引用 125
6.6 MostlyCopyingGC 127
6.7 黑名单 139
第7章 分代垃圾回收
7.1 什么是分代垃圾回收 142
7.2 Ungar的分代垃圾回收 143
7.3 优点 153
7.4 缺点 154
7.5 记录各代之间的引用的方法 154
7.6 多代垃圾回收 156
7.7 列车垃圾回收 157
第8章 增量式垃圾回收
8.1 什么是增量式垃圾回收 166
8.2 优点和缺点 174
8.3 Steele的算法 174
8.4 汤浅的算法 176
8.5 比较各个写入屏障 178
第9章 RC Immix算法
9.1 目的 180
9.2 合并型引用计数法 180
9.3 合并型引用计数法和Immix的融合 185
9.4 优点和缺点 189
实现篇
第10章 Python的垃圾回收
10.1 本章前言 192
10.2 对象管理 194
10.3 Python的内存分配器 196
10.4 第0层 通用的基础分配器 197
10.5 第1层 Python低级内存分配器 198
10.6 第2层 Python对象分配器 208
10.7 第3层 对象特有的分配器 231
10.8 引用计数法 234
10.9 引用的所有权 239
10.10 如何应对有循环引用的垃圾对象 245
10.11 性能调整的建议 269
第11章 DalvikVM的垃圾回收
11.1 本章前言 271
11.2 重新学习mmap 275
11.3 DalvikVM的源代码 279
11.4 DalvikVM的GC算法 282
11.5 对象管理 282
11.6 标记阶段 299
11.7 清除阶段 322
11.8 QA 327
第12章 Rubinius的垃圾回收
12.1 本章前言 329
12.2 Rubinius的GC算法 333
12.3 对象管理 334
12.4 走向准确式GC之路 343
12.5 GC复制算法 359
12.6 QA 375
第13章 V8的垃圾回收
13.1 本章前言 379
13.2 V8的GC算法 382
13.3 对象管理 382
13.4 通往准确式GC之路(V8篇) 389
13.5 GC标记-压缩算法 398
13.6 标记阶段 400
13.7 压缩阶段 412
13.8 QA 431
附录
附录A 简单语言入门:Python篇 432
附录B 简单语言入门:Java篇 435
附录C 简单语言入门:Ruby篇 436
附录D 简单语言入门:JavaScript篇 437
后记 439
参考文献 441
|
內容試閱:
|
GC的定义
GC 是 Garbage Collection 的简称,中文称为垃圾回收。
垃圾的回收
Garbage Collection 的 Garbage,也就是垃圾,具体指的是什么呢?
在现实世界中,说到垃圾,指的就是那些不读的书、不穿的衣服等。这种情况下的垃圾指的是自己不用的东西。
在 GC 中,垃圾的定义也是如此。GC 把程序不用的内存空间视为垃圾。关于垃圾的详细介绍,我们会在 1.5 节进行阐述。
GC 要做两件事
GC 要做的有两件事。
1.找到内存空间里的垃圾
2.回收垃圾,让程序员能再次利用这部分空间
满足这两项功能的程序就是 GC。
GC的好处
GC 到底会给程序员带来怎样的好处呢?
没有 GC 的世界
在没有 GC 的世界里,程序员必须自己手动进行内存管理,必须清楚地确保必要的内存空间,释放不要的内存空间。
程序员在手动进行内存管理时,申请内存尚不存在什么问题,但在释放不要的内存空间时,就必须一个不漏地释放。这非常地麻烦。
如果忘记释放内存空间,该内存空间就会发生内存泄露1,即无法被使用,但它又会持续存在下去。如果将发生内存泄露的程序放着不管,总有一刻内存会被占满,甚至还可能导致系统崩溃。
1内存泄露:内存空间在使用完毕后未释放。
另外,在释放内存空间时,如果忘记初始化指向释放对象的内存空间的指针,这个指针就会一直指向释放完毕的内存空间。因为这个指针没有指向有效的内存空间,处于一种悬挂的状态,所以我们称其为悬垂指针(dangling pointer)。如果在程序中错误地引用了悬垂指针,就会产生无法预期的 BUG。此外,悬垂指针也会导致严重的安全漏洞2。
22009 年 IE67 的零日漏洞曾轰动一时。译者注
更有甚者,还可能会出现错误释放了使用中的内存空间的情况。一旦错误释放了使用中的内存空间,下一次程序使用此空间时就会发生故障。大多数情况下会发生段错误,运气不好的话还可能引发恶性 BUG。
上述这样与内存相关的 BUG,其共通之处在于难以确定 BUG 的原因。我们都知道,与内存相关的 BUG 的潜在场所和 BUG 出现的场所在位置上(或者是时间上)不一致,所以很难确定 BUG 的原因。
有 GC 的世界
为了省去上述手动内存管理的麻烦,人们钻研开发出了 GC。如果把内存管理交给计算机,程序员就不用去想着释放内存了。
在手动内存管理中,程序员要判断哪些是不用的内存空间(垃圾),留意内存空间的寿命。但只要有 GC 在,这一切都可以交给 GC 来做。
有了 GC,程序员就不用再去担心因为忘了释放内存等而导致 BUG,从而大大减轻了负担。也不用再去头疼费事的内存管理。GC 能让程序员告别恼人的内存管理,把精力集中在更本质的编程工作上。
|
|