写在前面
垃圾回收技术给编程所带来的好处是不言而喻的,它能够从根本上解决软件开发过程中的内存管理问题,大大提升开发效率。
对于开发人员而言,在享受垃圾回收机制所带来便利的同时,是否曾想过隐藏在它背后的秘密?在进行技术选型时,如何评估垃圾回收对性能可能造成的影响?面对编程语言所提供的种类繁多的垃圾回收相关参数,应当如何进行配置与调优?
今天小伙伴们有福了,小编特意为大家带来这篇由垃圾内存算法出发,深度掌握垃圾算法技术实现的秘籍,相信通过本篇,开发人员能够更加深入地了解垃圾回收方面的相关问题、不同回收器的工作模式。接下来一起来看一下这篇由麻省理工学院大牛撰写的神书吧!!!
第1章:引言
- 1.1 显式内存释放
- 1.2 自动动态内存管理
- 1.3 垃圾回收算法之间的比较
- 1.4 性能上的劣势
- 1.5 实验方法
第1章以探讨为什么需要自动内存管理作为开篇,简要介绍了对不同垃圾回收策略进行比较的方法。该章结尾介绍了贯穿全书的抽象记法与伪代码描述方式。
第2章:标记-清扫回收
- 2.1 标记-清扫算法
- 2.2 三色抽象
- 2.3 改进的标记清扫算法
- 2.4 位图标记
- 2.5 懒惰清扫
- 2.6 标记过程中的高速缓存不命中问题
- 2.7 需要考虑的问题
第3章:标记-整理回收
- 3.1 双指针整理算法
- 3.2 Lisp 2算法
- 3.3 引线整理算法
- 3.4 单次遍历算法
- 3.5 需要考虑的问题
第4章:复制式回收
- 4.1 半区复制回收
- 4.2 遍历顺序与局部性
- 4.3 需要考虑的问题
第5章:引用计数
- 5.1 引用计数算法的优缺点
- 5.2 提升效率
- 5.3 延迟引用计数
- 5.4 合并引用计数
- 5.5 环状引|用计数
- 5.6 受限域引|用计数
- 5.7 需要考虑的问题
第2-5章详细描述了4种经典的垃圾回收算法,分别是标记-清扫算法、标记-整理算法、复制式回收算法以及引用计数算法。本篇对这些回收算法进行了深入的研究,并特别关注了其在现代硬件设施上的实现。
第6章:垃圾回收器的比较
- 6.1 吞吐量
- 6.2 停顿时间
- 6.3 内存空间
- 6.4 回收器的实现
- 6.5 自适应系统
- 6.6 统一垃圾回收理论
第6章深人比较了第2~ 5章所介绍的回收策略与算法,评估了它们各自的优缺点以及在不同情况下的适用性。
第7章:内存分配
- 7.1 顺序分配
- 7.2 空闲链表分配
- 7.3 内存碎片化
- 7.4 分区适应分配
- 7.5 分区适应分配与简单空闭链表分配的结合
- 7.6 其他需要考虑的问题
- 7.7 并发系统中的内存分配
- 7.8 需要考虑的问题
内存回收策略同样依赖于内存分配策略。第7章介绍了多种不同的内存分配技术,并进一步探究了自动垃圾回收与显式内存管理这两种场景下分配策略的不同之处。
第8章:堆内存的划分
- 8.1 术语
- 8.2 为何要进行分区
- 8.3 如何进行分区
- 8.4 何时进行分区
前7章假定所有堆中的对象均采用相同的管理策略,但根据许多因素可知这并非一种良好的设计策略。第8章讨论了为何需要将堆划分为多个不同的空间,以及如何管理这些空间。
第9章:分代垃圾回收
- 9.1 示例
- 9.2 时间测量
- 9.3 分代假说
- 9.4 分代与堆布局
- 9.5 多分代
- 9.6 年龄记录
- 9.7 对程序行为的适应
- 9.8 分代间指针
- 9.9 空间管理
- 9.10 中年优先回收
- 9.11 带式回收框架
- 9.12 启发式方法在分代垃圾回收中的应用
- 9.13 需要考虑的问题
- 9.14 抽象分代垃圾回收
第9章介绍了最成功的对象管理策略之一:分代垃圾回收。
第10章:其他分区策略
- 10.1 大对象空间
- 10.2 基于对象拓扑结构的回收器
- 10.3 混合标记清扫、复制式回收器
- 10.4 书签回收器
- 10.5 超引用计数回收器
- 10.6 需要考虑的问题
第10章介绍了大对象的管理策略以及其他分区策略。
第11章:运行时接口
- 11.1 对象分配接口
- 11.2 指针查找
- 11.3 对象表
- 11.4 来自外部代码的引用
- 11.5 栈屏障
- 11.6 安全回收点以及赋值器的挂起
- 11.7 针对代码的回收
- 11.8 读写屏障
- 11.9 地址空间管理
- 11.10 虚拟内存页保护策略的应用
- 11.11 堆大小的选择
- 11.12 需要考虑的问题
在构建垃圾回收器的过程中,与运行时系统其他部分的对接是最复杂的内容之一。因此第11章用了一整章的篇幅来介绍运行时接口,包括指针查找、能够安全发起垃圾回收的代码位置、读写屏障等。
第12章:特定语言相关内容
- 12.1 终结
- 12.2 弱引用
- 12.3 需要考虑的问题
第12章讨论了特定语言相关内容,包括终结机制和弱引用。
第13章:并发算法预备知识
- 13.1 硬件
- 13.2 硬件内存一致性
- 13.3 硬件原语
- 13.4 前进保障
- 13.5 并发算法的符号记法
- 13.6 互斥
- 13.7 工作共享与结束检测
- 13.8 并发数据结构
- 13.9 事务内存
- 13.10 需要考虑的问题
第13章探讨了现代硬件系统给垃圾回收器的实现者所带来的新机遇与挑战,同时介绍了同步、前进、结束、一致等问题的相关算法。
第14章:并行垃圾回收
- 14.1 是否有足够多的工作可以并行
- 14.2 负裁均衡
- 14.3 同步
- 14.4 并行回收的分类
- 14.5 并行标记
- 14.6 并行复制
- 14.7 并行清扫
- 14.8 并行整理
- 14.9 需要考虑的问题
第14章介绍如何在挂起所有应用程序线程的前提下使用多个线程进行垃圾回收。
第15章:并发垃圾回收
- 15.1 并发回收的正确性
- 15.2 并发回收的相关屏障技术
- 15.3 需要考虑的问题
第16章:并发标记清扫算法
- 16.1 初始化
- 16.2 结束
- 16.3 分配
- 16.4 标记过程与清扫过程的并发
- 16.5 即时标记
- 16.6 抽象并发回收框架
- 16.7 需要考虑的问题
第17章:并发复制、并发整理算法
- 17.1 主体并发复制: Baker算法
- 17.2 Brooks闫接屏障
- 17.3 自删除读屏障
- 17.4 副本复制
- 17.5 多版本复制
- 17.6 Sapphire回收器
- 17.7 并发整理算法
- 17.8 需要考虑的问题
第18章:并发引用计数算法
- 18.1 简单引用计数算法回顾
- 18.2 缓冲引用计数
- 18.3 并发环境下的环状引用计数处理
- 18.4 堆快照的获取
- 18.5 滑动视图引|用计数
- 18.6 需要考虑的问题
第15-18章介绍了多种不同种类的并发回收器,它们均放宽了“万物静止”这一要求,其回收过程只需要给用户程序引入十分短暂的停顿。
第19章:实时垃圾回收
- 19.1 实时系统
- 19.2 实时回收的调度
- 19.3 基于工作的实时回收
- 19.4 基于间隙的实时回收
- 19.5 基于时间的实时回收:Metronome回收器
- 19.6 多种调度策略的结合:“税收与开支”
- 19.7 内存碎片控制
- 19.8 需要考虑的问题
最后,第19章探讨了最富挑战性的课题,即垃圾回收在硬实时系统中的应用。
总结
本篇自始至终都密切关注现代硬件所带来的机遇与限制,对局部性问题的考量将贯穿全文。我们默认应用程序可能是多线程的。尽管本篇涵盖了很多更加简单、更加传统的算法,但我们还是花了全篇近一半的篇幅来介绍并行回收、增量回收、并发回收以及实时回收。
怎么样,通读到这里,你是否已经被他迷上了?那就记得转发+关注小编,直接查看下方图片,扫码添加或私信关键字【学习】即可马上获享完整PDF版。
还在等待什么,抓紧时间来学习提升吧!!!