书围绕着动态内存自动回收的话题,介绍了垃圾收集机制,详细分析了各种算法和相关技术。
本书共12章。第1章首先介绍计算机存储器管理的演化和自动内存回收的需求,并引入了本书所使用的术语和记法。第2章介绍了3种“经典”的垃圾收集技术:引用计数(reference counting)、标记-清扫(mark-sweep)和节点复制(copying)。 随后的4章更详细地讨论了上述这些垃圾收集方式和标记-缩并(mark-compact)收集。第7章和第8章分别介绍了在现代垃圾收集实现中具有重要地位的分代式(generational)垃圾收集和渐进式(incremental)垃圾收集。第9章和第10章扩展了垃圾收集的领域,讨论了如何让垃圾收集能够在无法得到来自语言编译器的支持的环境(分别是C和C++)中运行。第11章讨论了一个相对较新的研究领域 -- 垃圾收集和硬件数据cache的相互作用。第12章简要地考察了用于分布式系统的垃圾收集。
本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。
第1章 简介
1.1 内存分配的历史
1.1.1 静态分配
1.1.2 栈分配
1.1.3 堆分配
1.2 状态、存活性和指针可到达性
1.3 显式堆分配
1.3.1 一个简单的例子
1.3.2 垃圾
1.3.3 悬挂引用
1.3.4 共享
1.3.5 失败
1.4 为什么需要垃圾收集
1.4.1 语言的需求
1.4.2 问题的需求
1.4.3 软件工程的课题
1.4.4 没有银弹
1.5 垃圾收集的开销有多大
1.6 垃圾收集算法比较
1.7 记法
.1.7.1 堆
1.7.2 指针和子女
1.7.3 伪代码
1.8 引文注记
第2章 经典算法
2.1 引用计数算法
2.1.1 算法
2.1.2 一个例子
2.1.3 引用计数算法的优势和弱点
2.1.4 环形数据结构
2.2 标记一清扫算法
2.2.1 算法
2.2.2 标记—清扫算法的优势和弱点
2.3 节点复制算法
2.3.1 算法
2.3.2 一个例子
2.3.3 节点复制算法的优势和弱点
2.4 比较标记—清扫技术和节点复制技术
2.5 需要考虑的问题
2.6 引文注记
第3章 引用计数
3.1 非递归的释放
3.1.1 算法
3.1.2 延迟释放的优点和代价
3.2 延迟引用计数
3.2.1 deutsch-bobrow算法
3.2.2 一个例子
3.2.3 zct溢出
3.2.4 延迟引用计数的效率
3.3 计数域大小受限的引用计数
3.3.1 “粘住的”计数值
3.3.2 追踪式收集恢复计数值
3.3.3 仅有一位的计数值
3.3.4 恢复独享信息
3.3.5 “ought to be two”缓冲区
3.4 硬件引用计数
3.5 环形引用计数
3.5.1 函数式程序设计语言
3.5.2 bobrow的技术
3.5.3 弱指针算法
3.5.4 部分标记—清扫算法
3.6 需要考虑的问题
3.7 引文注记
第4章 标记—清扫垃圾收集
4.1 与引用计数技术的比较
4.2 使用标记栈
4.2.1 显式地使用栈来实现递归
4.2.2 最小化栈的深度
4.2.3 栈溢出
4.3 指针反转
4.3.1 deutsch-schorr-waite算法
4.3.2 可变大小节点的指针反转
4.3.3 指针反转的开销
4.4 位图标记
4.5 延迟清扫
4.5.1 hughes的延迟清扫算法
4.5.2 boehm-demers-weiser清扫器
4.5.3 zorn的延迟清扫器
4.6 需要考虑的问题
4.7 引文注记
第5章 标记—缩并垃圾收集
5.1 碎片现象
5.2 缩并的方式
5.3 “双指针”算法
5.3.1 算法
5.3.2 对“双指针”算法的分析
5.3.3 可变大小的单元
5.4 lisp 2 算法
5.5 基于表的方法
5.5.1 算法
5.5.2 间断表
5.5.3 更新指针
5.6 穿线方法
5.6.1 穿线指针
5.6.2 jonkers的缩并算法
5.6.3 前向指针
5.6.4 后向指针
5.7 需要考虑的问题
5.8 引文注记
第6章 节点复制垃圾收集
6.1 cheney的节点复制收集器
6.1.1 三色抽象
6.1.2 算法
6.1.3 一个例子
6.2 廉价地分配
6.3 多区域收集
6.3.1 静态区域
6.3.2 大型对象区域
6.3.3 渐进的递增缩并垃圾收集
6.4 垃圾收集器的效率
6.5 局部性问题
6.6 重组策略
6.6.1 深度优先节点复制与广度优先节点复制
6.6.2 不需要栈的递归式节点复制收集
6.6.3 近似于深度优先的节点复制
6.6.4 层次分解
6.6.5 哈希表
6.7 需要考虑的问题
6.8 引文注记
第7章 分代式垃圾收集
7.1 分代假设
7.2 分代式垃圾收集
7.2.1 一个简单例子
7.2.2 中断时间
7.2.3 次级收集的根集合
7.2.4 性能
7.3 提升策略
7.3.1 多个分代
7.3.2 提升的闽值
7.3.3 standard ml of new jersey收集器
7.3.4 自适应提升
7.4 分代组织和年龄记录
7.4.1 每个分代一个半区
7.4.2 创建空间
7.4.3 记录年龄
7.4.4 大型对象区域
7.5 分代间指针
7.5.1 写拦截器
7.5.2 入口表
7.5.3 记忆集
7.5.4 顺序保存缓冲区
7.5.5 硬件支持的页面标记
7.5.6 虚存系统支持的页面标记
7.5.7 卡片标记
7.5.8 记忆集还是卡片
7.6 非节点复制的分代式垃圾收集
7.7 调度垃圾收集
7.7.1 关键对象
7.7.2 成熟对象空间
7.8 需要考虑的问题
7.9 1 文注记
第8章 渐进式和并发垃圾收集
8.1 同步
8.2 拦截器方案
8.3 标记—清扫收集器
8.3.1 写拦截器
8.3.2 新单元
8.3.3 初始化和终止
8.3.4 虚存技术
8.4 并发引用计数
8.5 baker的算法
8.5.1 算法
8.5.2 baker算法的延迟的界限
8.5.3 baker的算法的局限
8.5.4 baker算法的变种
8.5.5 动态重组
8.6 appel-ellis-li收集器
8.6.1 各种改进
8.6.2 大型对象
8.6.3 分代
8.6.4 性能
8.7 应变复制收集器
8.7.1 nettle的应变复制收集器
8.7.2 huelsbergen和larus的收集器
8.7.3 doligez-leroy-gonthier收集器
8.8 baker的工作环收集器
8.9 对实时垃圾收集的硬件支持
8.10 需要考虑的问题
8.11 引文注记
第9章 c语言的垃圾收集
9.1 根不确定收集的一个分类
9.2 保守式垃圾收集
9.2.1 分配
9.2.2 寻找根和指针
9.2.3 内部指针
9.2.4 保守式垃圾收集的问题
9.2.5 识别错误
9.2.6 效率
9.2.7 渐进式、分代式垃圾收集
9.3 准复制式收集
9.3.1 堆的布局
9.3.2 分配
9.3.3 垃圾收集
9.3.4 分代式垃圾收集
9.3.5 无法精确识别的数据结构
9.3.6 准复制式收集的效率
9.4 优化的编译器是“魔鬼”
9.5 需要考虑的问题
9.6 引文注记
第10章 c++语言的垃圾收集
10.1 用于面向对象语言的垃圾收集
10.2 对c++垃圾收集器的需求
10.3 在编译器中还是在库中
10.4 保守式垃圾收集
10.5 准复制式收集器
10.6 智能指针
10.6.1 在没有智能指针类层次的情况下进行转换
10.6.2 多重继承
10.6.3 不正确的转换
10.6.4 某些指针无法“智能化”
10.6.5 用const和volatile修饰的指针
10.6.6 智能指针的“泄漏”
10.6.7 智能指针和引用计数
10.6.8 一个简单的引用计数指针
10.6.9 用于灵活的垃圾收集的智能指针
10.6.10 用于追踪式垃圾收集的智能指针
10.7 为支持垃圾收集而修改c++
10.8 ellis和deters的建议
10.9 终结机制
10.10 需要考虑的问题
10.11 引文注记
第11章 垃圾收集与cache
11.1 现代处理器体系结构
11.2 cache的体系结构
11.2.1 cache容量
11.2.2 放置策略
11.2.3 写策略
11.2.4 特殊的cache指令
11.3 内存访问的模式
11.3.1 标记 —清扫技术,使用标记位图和延迟清扫
11.3.2 节点复制垃圾收集
11.3.3 渐进式垃圾收集
11.3.4 避免读取
11.4 改进cache性能的标准方法
11.4.1 cache的容量
11.4.2 块大小
11.4.3 相联度
11.4.4 特殊指令
11.4.5 预取
11.5 失误率和总体cache性能
11.6 专用硬件
11.7 需要考虑的问题
11.8 引文注记
第12章 分布式垃圾收集
12.1 需求
12.2 虚拟共享存储器
12.2.1 共享虚拟存储器模型
12.2.2 共享数据对象模型
12.2.3 分布式共享存储器之上的垃圾收集
12.3 与分布式垃圾收集有关的课题
12.3.1 分类原则
12.3.2 同步
12.3.3 鲁棒性
12.4 分布式标记—清扫
12.4.1 hudak和keller
12.4.2 ali的算法
12.4.3 hughes的算法
12.4.4 liskov-ladin算法
12.4.5 augusteijn的算法
12.4.6 vestal的算法
12.4.7 schelvis-bledoeg算法
12.4.8 emerald收集器
12.4.9 ik收集器
12.5 分布式节点复制
12.6 分布式引用计数
12.6.1 lermen-maurer协议
12.6.2 间接引用计数
12.6.3 mancini-shrivastava算活
12.6.4 spg协议
12.6.5 “garbage collecting the world”
12.6.6 网络对象
12.6.7 带权引用计数
12.6.8 世代引用计数
12.7 对actor进行垃圾收集
12.7.1 halstead算法
12.7.2 标记算法
12.7.3 逻辑上集中式的收集器
12.8 引文注记
术语表
参考文献
索引
算法列表
《拿笔就画!色铅笔绘画从入门到精通》内容简介:拿笔就画!许多人都期望能够随心所欲地勾画我们看到的世界和想象的世界,《拿笔就
Composedofthreesections,thisbookpresentsthemostpopulartrainingalgorithmforneural...
本书首先回顾了与全书其他内容切实相关的UNIX系统内幕。回顾的目的是增进读者对UNIX操作系统概念的了解,并且定义随后使用的术语
多智能体系统及应用 本书特色多智能体和多智能体技术是人工智能领域活跃的研究分支。本书在2014年度“中国智能体及多智能体系统”研讨会的基础上结集而成,全书共分1...
新世纪五笔字型输入法-最新汉字输入法 本书特色 《新世纪五笔字型输入法》:由王玛字型发明人王水民教授授权。配有由中国王码公司提供的新世纪输入法正版软件。新世纪五...
不懂Word Excel PPT还敢拼职场-高手指引-赠送多维度学习套餐 本书特色 一个菜鸟用Excel改变职场的真实故事。如果说有什么技能是快速通关职场**技...
《能源互联网发展研究》内容简介:本书全面介绍了国内能源互联网的发展现状及进展,共分四篇,第1篇为战略篇,第2篇为技术篇,第3篇
《3G知识问答》以问答的方式通俗地介绍了3G的有关知识,主要内容包括:3G网络的基础知识、3G网络所涉及的基本技术,以及3G网络所
《走向学习中心》内容简介:未来30年,教育将会发生怎样的变化?如何培养下一代,才能使他们适应竞争更为激烈的社会?资源如此之多
《数据自助服务实践指南:数据开放与洞察提效》内容简介:本书主要介绍数据洞察及其四个阶段,第1部分为自助服务数据发现,包括元数
《西门子工业通信网络组态编程与故障诊断》全面介绍了西门子工业通信网络的结构、通信协议、通信服务和通信的组态编程与故障诊断
《光纤通信(第2版)》内容涉及光纤通信领域的多个方面,具体包括传输光纤、半导体光源和光检测器、无源光器件、光放大器、光纤通信
《经典常谈》内容简介:作者朱自清先生用浅显的语言,将代表我国传统文化的几部书,如说文、周易、尚书、诗经、三礼、春秋三传、四
《万国衣冠拜冕旒:唐代卷》内容简介:《万国衣冠拜冕旒:唐代卷》全书通过对我大唐帝国时期大量文明遗产(包括各类工艺品、美术作
《重返帕米尔》内容简介:2014年5月19日,复旦大学中国历史地理研究所侯杨方教授开发的《丝绸之路地理信息系统》正式上线,该系统利
《约翰·托兰自传》内容简介:★普利策奖得主、知名二战历史学者、《希特勒传》作者约翰·托兰封笔之作。★亲历20世纪影响世界格局
DIV+CSS网站布局从入门到精通-1DVD光盘+1配套手册 本书特色 《DIV+CSS网站布局从入门到精通》权威编著本教程由业内权威专家结合多年工作经验和设计...
"EthnographyandVirtualWorlds"istheonlybookofitskind-aconcise,comprehensive,andpr...
计算机辅助翻译实践 本书特色本书以当前语言服务行业新特点为背景,以职业译员的翻译技术能力为主线,以计算机辅助翻译(computer aided translat...
群智能算法及化工优化问题 内容简介 数学建模方法是研究化工过程的一种有效方法,由于化工过程影响因素多、波动大、反应机理复杂,因此,所建立的模型大多比较复杂,用传...