内容简介 · · · · · ·
★ Ruby之父Matz作推荐语:上古传承的魔法,彻底揭开垃圾回收的秘密!
★ 日本天才程序员兼Lisp黑客竹内郁雄审校
本书前半介绍基本GC算法,包括标记-清除GC、引用计数、复制算法的GC、串行GC的算法、并发GC的算法等。后半介绍V8、Rubinius、Dalvik、CPython等几种具体GC的实现。本书适合各领域程序员阅读。
目录 · · · · · ·
序章
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 Q&A 327
第12章 Rubinius的垃圾回收
12.1 本章前言 329
12.2 Rubinius的GC算法 333
12.3 对象管理 334
12.4 走向准确式GC之路 343
12.5 GC复制算法 359
12.6 Q&A 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 Q&A 431
附录
附录A 简单语言入门:Python篇 432
附录B 简单语言入门:Java篇 435
附录C 简单语言入门:Ruby篇 436
附录D 简单语言入门:JavaScript篇 437
后记 439
参考文献 441
· · · · · · (收起)
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 Q&A 327
第12章 Rubinius的垃圾回收
12.1 本章前言 329
12.2 Rubinius的GC算法 333
12.3 对象管理 334
12.4 走向准确式GC之路 343
12.5 GC复制算法 359
12.6 Q&A 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 Q&A 431
附录
附录A 简单语言入门:Python篇 432
附录B 简单语言入门:Java篇 435
附录C 简单语言入门:Ruby篇 436
附录D 简单语言入门:JavaScript篇 437
后记 439
参考文献 441
· · · · · · (收起)
"垃圾回收的算法与实现"试读 · · · · · ·
在序章中,我们将对什么是GC、GC 的历史、学习GC 的目的进行简要说明。此外还将说明阅读本书时的注意事项。 图 GC的定义 GC 是Garbage Collection 的简称,中文称为“垃圾回收”。 垃圾的回收 Garbage Collection 的Garbage,也就是“垃圾”,具体指的是什么呢? 在现实世界中,说到垃圾,指的就是那些不读的书、不穿的衣服等。这种情况下的“垃圾”指的是“自己不用的...
· · · · · · (查看全部试读)
丛书信息
· · · · · ·
图灵程序设计丛书(共107册),
这套丛书还有
《Spark快速大数据分析(第2版)》《Erlang/OTP并发编程实战》《斯坦福数据挖掘教程(第3版)》《数据科学实战》《Hadoop数据分析》
等
。
喜欢读"垃圾回收的算法与实现"的人也喜欢的电子书 · · · · · ·
支持 Web、iPhone、iPad、Android 阅读器
喜欢读"垃圾回收的算法与实现"的人也喜欢 · · · · · ·
- 虚拟机设计与实现 8.3
- 现代体系结构上的UNIX系统 8.6
- 数据密集型应用系统设计 9.6
- 编译器设计 8.4
- Kafka权威指南 8.4
- 用Go语言自制编译器 9.1
- 自制编译器 8.2
- Java性能优化权威指南 8.2
- Web性能权威指南 8.9
垃圾回收的算法与实现的书评 · · · · · · ( 全部 6 条 )
一本“图解”垃圾回收
即使你从来没有关心过内存的回收,这也是你不应错过的一本书。 我把它归为了图解系列,因为这本书循序渐进并加入了大量的插图,让学习垃圾回收成为一件有趣的事。 第一章介绍了垃圾回收的前置知识。后面通过标记清除,引用计数,GC复制等耳熟能详的算法带你深入去了解垃圾回收...
(展开)
> 更多书评 6篇
论坛 · · · · · ·
在这本书的论坛里发言当前版本有售 · · · · · ·
购买二手书 · · · · · ·
这本书的其他版本 · · · · · · ( 全部2 )
-
秀和システム (2010)暂无评分 2人读过
以下书单推荐 · · · · · · ( 全部 )
谁读这本书? · · · · · ·
二手市场
· · · · · ·
订阅关于垃圾回收的算法与实现的评论:
feed: rss 2.0
0 有用 jxwu 2022-04-16 21:09:48
看了前面的算法部分
4 有用 Jun 2018-03-01 01:48:11
算法篇+python实现,实现部分讲得不是很贴切,但是有用
0 有用 轩辕拾銉 2020-10-29 18:15:26
一周目; 只看了算法部分的一部分, 实现部分尝试看了看 Py 的, 结果晕头转向..; 初级选手建议算法部分只看 每一章 的 头两个 算法; 因为原书是 2009 年写的, 所以很多东西会比较老...看实现需要一些功底...
0 有用 cppcoffee 2022-07-07 18:19:30
提到了多种 GC 算法的理论与伪代码实现,再结合书中的例图,对GC算法可以了解不少 之前认为计数方式的GC会更好,没想到书中提到了更多内容,和需要解决的问题和方案。
0 有用 liuwill 2023-07-23 23:15:02 上海
垃圾回收的发展却非常快,作者书中介绍的各种算法和组合,千变万化,光是几年前相对还比较熟悉的V8,跟本书写作的2009年,已经有很大变化。 但是阳光底下又没有太多新鲜事,作者写书之后才出现的Go使用的三色标记和增量回收,是Dijkstra等人1970年代的论文就在研究的。 前两年读这本书前,对引用计数有种偏见,不能处理循环依赖,结合部分标记清除算法,并不是问题,就像Python,不同的策略可以解决不... 垃圾回收的发展却非常快,作者书中介绍的各种算法和组合,千变万化,光是几年前相对还比较熟悉的V8,跟本书写作的2009年,已经有很大变化。 但是阳光底下又没有太多新鲜事,作者写书之后才出现的Go使用的三色标记和增量回收,是Dijkstra等人1970年代的论文就在研究的。 前两年读这本书前,对引用计数有种偏见,不能处理循环依赖,结合部分标记清除算法,并不是问题,就像Python,不同的策略可以解决不同问题,永恒的是权衡取舍。 对我们的启示是,真的开发垃圾回收器,应该从根本思考问题,就是第一性原理,要从一个矩阵中获得完整的信息,必然要做的是遍历每一个节点,做标记,记录获得的信息。 对象和空间也并不神秘,对象中非指针的基本类型决定占用的空间,空间就是连续的可寻址的固定大小的块,用指针和偏移来分割 (展开)
0 有用 Charles 2024-02-21 22:30:04 辽宁
太小众了纯粹看着玩的没什么收获
0 有用 bobo 2023-08-10 02:02:09 陕西
没有读完,但是前面讲得很好
0 有用 liuwill 2023-07-23 23:15:02 上海
垃圾回收的发展却非常快,作者书中介绍的各种算法和组合,千变万化,光是几年前相对还比较熟悉的V8,跟本书写作的2009年,已经有很大变化。 但是阳光底下又没有太多新鲜事,作者写书之后才出现的Go使用的三色标记和增量回收,是Dijkstra等人1970年代的论文就在研究的。 前两年读这本书前,对引用计数有种偏见,不能处理循环依赖,结合部分标记清除算法,并不是问题,就像Python,不同的策略可以解决不... 垃圾回收的发展却非常快,作者书中介绍的各种算法和组合,千变万化,光是几年前相对还比较熟悉的V8,跟本书写作的2009年,已经有很大变化。 但是阳光底下又没有太多新鲜事,作者写书之后才出现的Go使用的三色标记和增量回收,是Dijkstra等人1970年代的论文就在研究的。 前两年读这本书前,对引用计数有种偏见,不能处理循环依赖,结合部分标记清除算法,并不是问题,就像Python,不同的策略可以解决不同问题,永恒的是权衡取舍。 对我们的启示是,真的开发垃圾回收器,应该从根本思考问题,就是第一性原理,要从一个矩阵中获得完整的信息,必然要做的是遍历每一个节点,做标记,记录获得的信息。 对象和空间也并不神秘,对象中非指针的基本类型决定占用的空间,空间就是连续的可寻址的固定大小的块,用指针和偏移来分割 (展开)
0 有用 亮亮灯火 2023-05-30 10:50:22 辽宁
读了缓解焦虑
0 有用 Stanley Wind 2023-04-07 09:19:36 上海
草草翻了下,太多算法实现细节了,以后再来学习吧