图书介绍

垃圾回收算法手册 自动内存管理的艺术【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

垃圾回收算法手册 自动内存管理的艺术
  • (英)理查德·琼斯(Richard Jones),(美)安东尼·霍思金(Antony Hosking),(美)艾略特·莫斯(Eliot Moss)著 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111528821
  • 出版时间:2016
  • 标注页数:437页
  • 文件大小:101MB
  • 文件页数:451页
  • 主题词:计算机算法-手册

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

垃圾回收算法手册 自动内存管理的艺术PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 引言1

1.1 显式内存释放1

1.2 自动动态内存管理3

1.3 垃圾回收算法之间的比较5

1.3.1 安全性5

1.3.2 吞吐量5

1.3.3 完整性与及时性5

1.3.4 停顿时间6

1.3.5 空间开销7

1.3.6 针对特定语言的优化7

1.3.7 可扩展性与可移植性8

1.4 性能上的劣势8

1.5 实验方法8

1.6 术语和符号10

1.6.1 堆10

1.6.2 赋值器与回收器11

1.6.3 赋值器根11

1.6.4 引用、域和地址11

1.6.5 存活性、正确性以及可达性12

1.6.6 伪代码12

1.6.7 分配器13

1.6.8 赋值器的读写操作13

1.6.9 原子操作13

1.6.10 集合、多集合、序列以及元组14

第2章 标记-清扫回收15

2.1 标记-清扫算法16

2.2 三色抽象18

2.3 改进的标记-清扫算法18

2.4 位图标记19

2.5 懒惰清扫21

2.6 标记过程中的高速缓存不命中问题24

2.7 需要考虑的问题25

2.7.1 赋值器开销25

2.7.2 吞吐量26

2.7.3 空间利用率26

2.7.4 移动,还是不移动26

第3章 标记-整理回收28

3.1 双指针整理算法29

3.2 Lisp 2算法30

3.3 引线整理算法32

3.4 单次遍历算法34

3.5 需要考虑的问题36

3.5.1 整理的必要性36

3.5.2 整理的吞吐量开销36

3.5.3 长寿数据36

3.5.4 局部性37

3.5.5 标记-整理算法的局限性37

第4章 复制式回收38

4.1 半区复制回收38

4.1.1 工作列表的实现39

4.1.2 示例40

4.2 遍历顺序与局部性42

4.3 需要考虑的问题46

4.3.1 分配46

4.3.2 空间与局部性47

4.3.3 移动对象48

第5章 引用计数49

5.1 引用计数算法的优缺点50

5.2 提升效率51

5.3 延迟引用计数52

5.4 合并引用计数54

5.5 环状引用计数57

5.6 受限域引用计数61

5.7 需要考虑的问题62

5.7.1 应用场景62

5.7.2 高级的解决方案62

第6章 垃圾回收器的比较64

6.1 吞吐量64

6.2 停顿时间65

6.3 内存空间65

6.4 回收器的实现66

6.5 自适应系统66

6.6 统一垃圾回收理论67

6.6.1 垃圾回收的抽象67

6.6.2 追踪式垃圾回收67

6.6.3 引用计数垃圾回收69

第7章 内存分配72

7.1 顺序分配72

7.2 空闲链表分配73

7.2.1 首次适应分配73

7.2.2 循环首次适应分配75

7.2.3 最佳适应分配75

7.2.4 空闲链表分配的加速76

7.3 内存碎片化77

7.4 分区适应分配78

7.4.1 内存碎片79

7.4.2 空间大小分级的填充79

7.5 分区适应分配与简单空闲链表分配的结合81

7.6 其他需要考虑的问题81

7.6.1 字节对齐81

7.6.2 空间大小限制82

7.6.3 边界标签82

7.6.4 堆可解析性82

7.6.5 局部性84

7.6.6 拓展块保护84

7.6.7 跨越映射85

7.7 并发系统中的内存分配85

7.8 需要考虑的问题86

第8章 堆内存的划分87

8.1 术语87

8.2 为何要进行分区87

8.2.1 根据移动性进行分区87

8.2.2 根据对象大小进行分区88

8.2.3 为空间进行分区88

8.2.4 根据类别进行分区89

8.2.5 为效益进行分区89

8.2.6 为缩短停顿时间进行分区90

8.2.7 为局部性进行分区90

8.2.8 根据线程进行分区90

8.2.9 根据可用性进行分区91

8.2.10 根据易变性进行分区91

8.3 如何进行分区92

8.4 何时进行分区93

第9章 分代垃圾回收95

9.1 示例95

9.2 时间测量96

9.3 分代假说97

9.4 分代与堆布局97

9.5 多分代98

9.6 年龄记录99

9.6.1 集体提升99

9.6.2 衰老半区100

9.6.3 存活对象空间与柔性提升101

9.7 对程序行为的适应103

9.7.1 Appel式垃圾回收103

9.7.2 基于反馈的对象提升104

9.8 分代间指针105

9.8.1 记忆集106

9.8.2 指针方向106

9.9 空间管理107

9.10 中年优先回收108

9.11 带式回收框架110

9.12 启发式方法在分代垃圾回收中的应用112

9.13 需要考虑的问题113

9.14 抽象分代垃圾回收115

第10章 其他分区策略117

10.1 大对象空间117

10.1.1 转轮回收器118

10.1.2 在操作系统支持下的对象移动119

10.1.3 不包含指针的对象119

10.2 基于对象拓扑结构的回收器119

10.2.1 成熟对象空间的回收120

10.2.2 基于对象相关性的回收122

10.2.3 线程本地回收123

10.2.4 栈上分配126

10.2.5 区域推断127

10.3 混合标记-清扫、复制式回收器128

10.3.1 Garbage-First回收129

10.3.2 Immix回收以及其他回收130

10.3.3 受限内存空间中的复制式回收133

10.4 书签回收器134

10.5 超引用计数回收器135

10.6 需要考虑的问题136

第11章 运行时接口138

11.1 对象分配接口138

11.1.1 分配过程的加速141

11.1.2 清零141

11.2 指针查找142

11.2.1 保守式指针查找143

11.2.2 使用带标签值进行精确指针查找144

11.2.3 对象中的精确指针查找145

11.2.4 全局根中的精确指针查找147

11.2.5 栈与寄存器中的精确指针查找147

11.2.6 代码中的精确指针查找157

11.2.7 内部指针的处理158

11.2.8 派生指针的处理159

11.3 对象表159

11.4 来自外部代码的引用160

11.5 栈屏障162

11.6 安全回收点以及赋值器的挂起163

11.7 针对代码的回收165

11.8 读写屏障166

11.8.1 读写屏障的设计工程学167

11.8.2 写屏障的精度167

11.8.3 哈希表169

11.8.4 顺序存储缓冲区170

11.8.5 溢出处理172

11.8.6 卡表172

11.8.7 跨越映射174

11.8.8 汇总卡176

11.8.9 硬件与虚拟内存技术176

11.8.10 写屏障相关技术小结177

11.8.11 内存块链表178

11.9 地址空间管理179

11.10 虚拟内存页保护策略的应用180

11.10.1 二次映射180

11.10.2 禁止访问页的应用181

11.11 堆大小的选择183

11.12 需要考虑的问题185

第12章 特定语言相关内容188

12.1 终结188

12.1.1 何时调用终结方法189

12.1.2 终结方法应由哪个线程调用190

12.1.3 是否允许终结方法彼此之间的并发190

12.1.4 是否允许终结方法访问不可达对象190

12.1.5 何时回收已终结对象191

12.1.6 终结方法执行出错时应当如何处理191

12.1.7 终结操作是否需要遵从某种顺序191

12.1.8 终结过程中的竞争问题192

12.1.9 终结方法与锁193

12.1.10 特定语言的终结机制193

12.1.11 进一步的研究195

12.2 弱引用195

12.2.1 其他动因196

12.2.2 对不同强度指针的支持196

12.2.3 使用虚对象控制终结顺序199

12.2.4 弱指针置空过程的竞争问题199

12.2.5 弱指针置空时的通知199

12.2.6 其他语言中的弱指针200

12.3 需要考虑的问题201

第13章 并发算法预备知识202

13.1 硬件202

13.1.1 处理器与线程202

13.1.2 处理器与内存之间的互联203

13.1.3 内存203

13.1.4 高速缓存204

13.1.5 高速缓存一致性204

13.1.6 高速缓存一致性对性能的影响示例:自旋锁205

13.2 硬件内存一致性207

13.2.1 内存屏障与先于关系208

13.2.2 内存一致性模型209

13.3 硬件原语209

13.3.1 比较并交换210

13.3.2 加载链接/条件存储211

13.3.3 原子算术原语212

13.3.4 检测-检测并设置213

13.3.5 更加强大的原语213

13.3.6 原子操作原语的开销214

13.4 前进保障215

13.5 并发算法的符号记法217

13.6 互斥218

13.7 工作共享与结束检测219

13.8 并发数据结构224

13.8.1 并发栈226

13.8.2 基于单链表的并发队列228

13.8.3 基于数组的并发队列230

13.8.4 支持工作窃取的并发双端队列235

13.9 事务内存237

13.9.1 何谓事务内存237

13.9.2 使用事务内存助力垃圾回收器的实现239

13.9.3 垃圾回收机制对事务内存的支持240

13.10 需要考虑的问题241

第14章 并行垃圾回收242

14.1 是否有足够多的工作可以并行243

14.2 负载均衡243

14.3 同步245

14.4 并行回收的分类245

14.5 并行标记246

14.6 并行复制254

14.6.1 以处理器为中心的并行复制254

14.6.2 以内存为中心的并行复制技术258

14.7 并行清扫263

14.8 并行整理264

14.9 需要考虑的问题267

14.9.1 术语267

14.9.2 并行回收是否值得267

14.9.3 负载均衡策略267

14.9.4 并行追踪268

14.9.5 低级同步269

14.9.6 并行清扫与并行整理270

14.9.7 结束检测270

第15章 并发垃圾回收271

15.1 并发回收的正确性272

15.1.1 三色抽象回顾273

15.1.2 对象丢失问题274

15.1.3 强三色不变式与弱三色不变式275

15.1.4 回收精度276

15.1.5 赋值器颜色276

15.1.6 新分配对象的颜色276

15.1.7 基于增量更新的解决方案277

15.1.8 基于起始快照的解决方案277

15.2 并发回收的相关屏障技术277

15.2.1 灰色赋值器屏障技术278

15.2.2 黑色赋值器屏障技术279

15.2.3 屏障技术的完整性280

15.2.4 并发写屏障的实现机制281

15.2.5 单级卡表282

15.2.6 两级卡表282

15.2.7 减少回收工作量的相关策略282

15.3 需要考虑的问题283

第16章 并发标记-清扫算法285

16.1 初始化285

16.2 结束287

16.3 分配287

16.4 标记过程与清扫过程的并发288

16.5 即时标记289

16.5.1 即时回收的写屏障290

16.5.2 Doligez-Leroy-Gonthier回收器290

16.5.3 Doligez-Leroy-Gonthier回收器在Java中的应用292

16.5.4 滑动视图292

16.6 抽象并发回收框架293

16.6.1 回收波面294

16.6.2 增加追踪源头295

16.6.3 赋值器屏障295

16.6.4 精度295

16.6.5 抽象并发回收器的实例化296

16.7 需要考虑的问题296

第17章 并发复制、并发整理算法298

17.1 主体并发复制:Baker算法298

17.2 Brooks间接屏障301

17.3 自删除读屏障301

17.4 副本复制302

17.5 多版本复制303

17.6 Sapphire回收器306

17.6.1 回收的各个阶段306

17.6.2 相邻阶段的合并311

17.6.3 Volatile域312

17.7 并发整理算法312

17.7.1 Compressor回收器312

17.7.2 Pauseless回收器315

17.8 需要考虑的问题321

第18章 并发引用计数算法322

18.1 简单引用计数算法回顾322

18.2 缓冲引用计数324

18.3 并发环境下的环状引用计数处理326

18.4 堆快照的获取326

18.5 滑动视图引用计数328

18.5.1 面向年龄的回收328

18.5.2 算法实现328

18.5.3 基于滑动视图的环状垃圾回收331

18.5.4 内存一致性331

18.6 需要考虑的问题332

第19章 实时垃圾回收333

19.1 实时系统333

19.2 实时回收的调度334

19.3 基于工作的实时回收335

19.3.1 并行、并发副本回收335

19.3.2 非均匀工作负载的影响341

19.4 基于间隙的实时回收342

19.4.1 回收工作的调度346

19.4.2 执行开销346

19.4.3 开发者需要提供的信息347

19.5 基于时间的实时回收:Metronome回收器347

19.5.1 赋值器使用率348

19.5.2 对可预测性的支持349

19.5.3 Metronome回收器的分析351

19.5.4 鲁棒性355

19.6 多种调度策略的结合:“税收与开支”355

19.6.1 “税收与开支”调度策略356

19.6.2 “税收与开支”调度策略的实现基础357

19.7 内存碎片控制359

19.7.1 Metronome回收器中的增量整理360

19.7.2 单处理器上的增量副本复制361

19.7.3 Stopless回收器:无锁垃圾回收361

19.7.4 Staccato回收器:在赋值器无等待前进保障条件下的尽力整理363

19.7.5 Chicken回收器:在赋值器无等待前进保障条件下的尽力整理(x86平台)365

19.7.6 Clover回收器:赋值器乐观无锁前进保障下的可靠整理366

19.7.7 Stopless回收器、Chicken回收器、Clover回收器之间的比较367

19.7.8 离散分配368

19.8 需要考虑的问题370

术语表372

参考文献383

索引413

热门推荐