万本电子书0元读

万本电子书0元读

顶部广告

深入Java虚拟机:JVM G1GC的算法与实现电子书

结合实用JVM,图解Java垃圾回收机制的关键技术! ·90张图表+33段代码,轻松理解G1GC算法原理 ·HotSpotVM源码剖析,深探讨G1GC具体实现 1.深Java虚拟机底层原理,详细解读经典GC算法; 2.理论结合实际,基于HotSpotVM源码探讨具体实现; 3.图文并茂、深浅出,辅以大量插图和代码细致讲解。

售       价:¥

纸质售价:¥43.90购买纸书

230人正在读 | 1人评论 6.4

作       者:[日]中村成洋

出  版  社:人民邮电出版社有限公司

出版时间:2021-01-01

字       数:14.4万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
本书深Java虚拟机底层原理,对JVM内存管理中的垃圾回收算法G1GC行了详细解读。全书分为“算法篇”和“实现篇”两大部分:前一部分主要介绍G1GC的算法原理,内容包括G1GC的并发标记、转移功能、软实时性的实现和分代G1GC模式;后一部分聚焦算法篇中没有详细讲解的实现部分,基于HotSpotVM源码,讲解对象管理功能、内存分配器的机制、线程管理方法和G1GC的具体实现。 本书以图配文,通俗易懂,既系统介绍了G1GC的基础算法,又贴近现实,剖析了实用JVM中的G1GC实现,同时还包含了作者对G1GC的研究成果和独到见解,是深理解JVM和G1GC机制的佳作。<br/>【推荐语】<br/>结合实用JVM,图解Java垃圾回收机制的关键技术! ·90张图表+33段代码,轻松理解G1GC算法原理 ·HotSpotVM源码剖析,深探讨G1GC具体实现 1.深Java虚拟机底层原理,详细解读经典GC算法; 2.理论结合实际,基于HotSpotVM源码探讨具体实现; 3.图文并茂、深浅出,辅以大量插图和代码细致讲解。<br/>【作者】<br/>中村成洋(作者) 生于1985年。日本网络应用通信研究所研究员。因为偶然的机会对GC产生浓厚兴趣,本人却说不清为何喜欢GC,被人追问原因时,总是回答“是缘分”。现在是CRuby的committer,每天致力于GC的改善。著有《垃圾回收的算法与实现》。 吴炎昌(译者) 毕业于西北工业大学软件工程专业,曾供职于多家日本软件公司,从事系统发工作。2015年回国后加美团评,现任系统研发工程师。爱好旅行、电影和品尝各种美食,有一位志趣相投的伴侣。<br/>
目录展开

版权声明

前言

注意事项

读者对象

本书中的符号

图中的箭头

伪代码

命名规则

空指针和真假值

函数

缩进

指针

for 循环

队列

特殊的函数

并行 GC 和并发 GC

代码中的表示方法

致谢

说明

算法篇

第 1 章 G1GC 是什么

1.1 G1GC 和实时性

1.1.1 实时性

1.1.2 硬实时性和软实时性

1.1.3 可预测性

1.1.4 G1GC 中的实时性

1.1.5 Java 中出现 G1GC 的背景

1.2 堆结构

1.3 执行过程

1.4 并发标记和转移

第 2 章 并发标记

2.1 什么是并发标记

2.2 标记位图

2.3 执行步骤

2.4 步骤①——初始标记阶段

2.5 步骤②——并发标记阶段

2.5.1 SATB

2.5.2 SATB 专用写屏障的优化

2.5.3 SATB 专用写屏障和多线程执行

2.6 步骤③——最终标记阶段

2.7 步骤④——存活对象计数

2.8 步骤⑤——收尾工作

转移效率

2.9 总结

第 3 章 转移

3.1 什么是转移

3.2 转移专用记忆集合

3.2.1 卡表

3.2.2 转移专用记忆集合的构造

3.3 转移专用写屏障

3.4 转移专用记忆集合维护线程

3.5 热卡片

3.6 执行步骤

3.7 步骤①——选择回收集合

3.8 步骤②——根转移

3.8.1 对象转移

3.9 步骤③——转移

3.10 标记信息的作用

3.11 总结

第 4 章 软实时性

4.1 用户的需求

4.2 预测转移时间

4.3 预测可信度

4.4 GC 暂停处理的调度

4.5 并发标记中的暂停处理

第 5 章 分代 G1GC 模式

5.1 不同点

5.2 新生代区域

5.3 分代对象转移

5.4 执行过程简述

5.5 分代选择回收集合

5.6 设置最大新生代区域数

5.7 GC 的切换

5.8 GC 执行的时机

第 6 章 算法篇总结

6.1 关系图

6.2 优点

6.3 缺点

6.4 结束语

实现篇

第 7 章 准备工作

7.1 什么是 HotSpotVM

7.2 什么是 OpenJDK

7.3 获取源码

7.4 代码结构

7.5 两个特殊类

7.5.1 CHeapObj 类

7.5.2 AllStatic 类

7.6 适用于各种操作系统的接口

第 8 章 对象管理功能

8.1 对象管理功能的接口

8.2 对象管理功能的全貌

8.3 CollectedHeap 类

8.3.1 OpenJDK 7 的启动选项和 VM 堆类

8.4 CollectorPolicy 类

8.4.1 启动选项和 CollectorPolicy 类

8.5 各个 GC 类

第 9 章 堆结构

9.1 VM 堆

9.1.1 VM 堆类的初始化

9.2 G1GC 堆

9.2.1 G1CollectedHeap 类

9.2.2 HeapRegion 类

9.2.3 HeapRegionSeq 类

9.3 常驻空间

第 10 章 分配器

10.1 内存分配的流程

10.2 VM 堆的申请

10.3 VM 堆的分配

10.3.1 区域的分配

10.3.2 Windows 上内存空间的申请和分配

10.3.3 Linux 上内存空间的申请和分配

10.3.4 VM 堆中实现对齐的方法

10.4 对象的分配

10.4.1 对象分配的流程

10.4.2 在 G1GC 的 VM 堆中分配内存

10.5 TLAB

第 11 章 对象结构

11.1 oopDesc 类

11.2 klassOopDesc 类

11.3 Klass 类

11.4 类之间的关系

11.5 不要在 oopDesc 类中定义虚函数

11.6 对象头

11.6.1 奇妙的 markOopDesc

11.6.2 前向指针

第 12 章 HotSpotVM 的线程管理

12.1 线程操作的抽象化

12.2 Thread 类

12.3 线程的生命周期

12.3.1 OSThread 类

12.4 Windows 线程的创建

STACK_SIZE_PARAM_IS_A_RESERVATION 标志位

12.5 Windows 线程的处理开始

12.5.1 有效使用缓存行

12.6 Linux 线程的创建

12.6.1 栈的警戒缓存

12.7 开始 Linux 线程的处理

第 13 章 线程的互斥处理

13.1 什么是互斥处理

13.2 互斥量

13.3 监视器

13.3.1 Java 的监视器

13.3.2 Java 监视器与一般监视器的区别

13.4 监视器的实现

13.4.1 线程的暂停与重新启动

13.4.2 监视器的加锁与解锁

13.4.3 监视器的 wait、notify 和 notifyAll 方法

13.5 Monitor 类

13.6 Mutex 类

13.7 MutexLocker 类

第 14 章 GC 线程(并行篇)

14.1 并行执行的流程

14.2 AbstractWorkGang 类

14.3 AbstractGangTask 类

14.4 GangWorker 类

14.5 并行 GC 的执行示例

14.5.1 ①准备工人

14.5.2 ②创建任务

14.5.3 ③并行执行任务

第 15 章 GC 线程(并发篇)

15.1 ConcurrentGCThread 类

15.2 SuspendibleThreadSet 类

15.2.1 集合的操作

15.2.2 线程暂停的时机

15.2.3 从集合外调用 yield()

15.2.4 使用示例

15.3 安全点

15.3.1 什么是安全点

15.3.2 并发 GC 的安全点

15.4 VM 线程

15.4.1 什么是 VM 线程

15.4.2 VM 操作

15.4.3 VM_Operation 类

15.4.4 VM 操作的执行示例

第 16 章 并发标记

16.1 并发标记的全貌

16.1.1 执行步骤

16.1.2 ConcurrentMark 类

16.1.3 ConcurrentMarkThread 类

16.1.4 开始执行并发标记

16.1.5 并发标记的周期

16.2 步骤①——初始标记阶段

16.2.1 根

16.2.2 根扫描的框架

16.2.3 G1GC 的根扫描

16.2.4 根扫描时的标记

16.2.5 位图的并行化方法

16.3 步骤②——并发标记阶段

16.4 步骤③——最终标记阶段

16.5 步骤④——存活对象计数

16.6 步骤⑤——收尾工作

第 17 章 转移

17.1 转移的全貌

17.1.1 执行步骤

17.1.2 转移执行的时机

17.1.3 do_collection_pause_at_safepoint()

17.1.4 转移专用记忆集合维护线程

17.2 步骤①——选择回收集合

17.2.1 选择新生代区域

17.2.2 选择老年代区域

17.3 步骤②——根转移

17.3.1 evacuate_collection_set()

17.3.2 对象转移

17.3.3 复制函数

17.4 步骤③——转移

第 18 章 预测与调度

18.1 根据历史记录进行预测

18.1.1 均值、方差和标准差

18.1.2 衰减均值

18.1.3 衰减方差

18.1.4 包含偏差的预测

18.1.5 历史记录的实现

18.1.6 获取预测值

18.2 并发标记的调度

18.3 转移的调度

第 19 章 准确式 GC 的实现

19.1 栈图

19.1.1 基本类型和引用类型的变量

19.1.2 HotSpotVM 的栈

19.1.3 HotSpotVM 的执行流程

19.1.4 什么是栈图

19.1.5 抽象解释器

19.1.6 栈图的创建

19.1.7 有条件分支时的栈图

19.1.8 方法调用时的栈图

19.1.9 已编译的栈帧

19.2 句柄区域与句柄标记

第 20 章 写屏障的性能开销

20.1 运行时切换 GC 算法

20.1.1 性能下降的担忧

20.1.2 写屏障的性能开销增加

20.2 解释器的写屏障

20.2.1 写屏障的切换

20.2.2 在 G1GC 加入前,写屏障只有一种

20.3 JIT 编译器的写屏障

20.3.1 C1 编译器

20.3.2 生成写屏障的机器代码

后记

写在算法篇完成之后

写在实现篇完成之后

致想要深入研究 GC 的读者

参考文献

作者简介

看完了

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部