深入Java虚拟机:JVM G1GC的算法与实现 封面

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

暂无评分
字数
22.4万字
章节数
22
丛书
图灵程序设计丛书·Java系列
ISBN
9787115554529

标签

内容简介

本书深入讲解 Java 虚拟机底层原理,围绕 JVM 内存管理中的垃圾回收算法 G1GC(Garbage First Garbage Collection)展开,全书分为「算法篇」与「实现篇」两大部分。算法篇先介绍 G1GC 的基本思路与堆结构,包括 Region 划分下的堆布局,以及并发标记与转移两条主线;随后逐阶段拆解并发标记的初始标记、并发标记、最终标记、存活对象计数与收尾工作,并讲解转移阶段的回收集合选择、根转移与转移流程,以及转移专用记忆集合、写屏障、热卡片等配套机制。在此基础上,作者用大量篇幅讨论 G1GC 的软实时性,即如何根据历史数据预测转移时间、评估预测可信度并调度 GC 暂停,还介绍了分代 G1GC 模式与纯 G1GC 模式的差异。实现篇以 HotSpotVM 源码为依据,从环境准备、对象管理功能的整体结构讲起,分析 CollectedHeap、CollectorPolicy 与各 GC 工厂类、G1 堆结构、内存分配器与 TLAB、对象与对象头结构,以及 HotSpotVM 的线程创建、生命周期与互斥处理,并进一步剖析并行与并发 GC 线程框架、并发标记与转移的具体实现、暂停时间预测与调度、准确式 GC、写屏障性能开销等内容。全书配有九十余张图表和三十余段代码,适合希望从算法与源码两个层面理解 G1GC 的读者。

编辑推荐

市面上讲 JVM 的书不少,但愿意把 G1 回收器「为什么这样设计」讲透的并不多。本书作者中村成洋长期研究垃圾回收,是 CRuby 的 committer,也是《垃圾回收的算法与实现》实现篇的作者;本书的源头是他的日文专著《徹底解剖「G1GC」》算法篇与实现篇。全书最大的特点是把 G1GC 拆成「算法」与「实现」两层来读:算法篇用九十余张图表、三十余段代码,把并发标记各阶段、转移的回收集合与根转移、软实时性中的暂停时间预测等机制一层层摆开;实现篇直接对着 HotSpotVM 源码,讲对象管理、堆结构、分配器、TLAB、对象头、线程与互斥处理,直到并发标记、转移、预测调度和写屏障开销的实现细节。它不替代面试手册,也不教调参,而是补上「G1 到底怎么跑起来」这一块知识。对已经会用 G1、却总觉得云里雾里的工程师,这本书像一份细致的源码地图;对读过 Garbage-First 论文却没能完全理解的读者,它提供了论文之外的分步解释。

适合谁读

适合

  • 已经熟悉 Java 基础与 JVM 内存模型,想深入理解 G1 回收器原理的工程师
  • 准备阅读 HotSpot 源码、需要一份导读与路线图的中高级开发者
  • 从事 JVM 调优,希望从机制层面解释 GC 日志与暂停时间的人
  • 对垃圾回收算法本身感兴趣、想横向比较多款回收器的技术爱好者

不适合

  • 刚学 Java、尚未接触 JVM 内存区域与对象分配概念的初学者
  • 只想找几条 GC 参数快速调优、不关心原理的读者
  • 主要使用非 HotSpot 系列虚拟机且需要对应实现细节的读者

阅读建议

  1. 先通读算法篇,把并发标记、转移与暂停预测的流程画出自己的流程图,再进入实现篇对源码。
  2. 阅读实现篇时配合 OpenJDK 7/8 的 hotspot 源码,边看边定位书中提到的类与字段,效果最好。
  3. 遇到软实时性、预测调度等抽象章节,可结合一次线上 GC 日志中的实际暂停时间对照理解。
  4. 不必一次读完二十章,可把第 16、17、18 章作为 G1 实现的重点,其余章节按需查阅。

出版社简介

人民邮电出版社 中国 · 成立于 1953 年

人民邮电出版社以科技、计算机与信息通信类图书见长,并由此延伸至摄影、艺术、软件学习与励志成长等门类,形成较为多元的出版方向。库内图书既涵盖《重构与模式(修订版)》《华为交换机学习指南(第二版)》等计算机与通信技术读物,也收录《小王子(中英法彩绘典藏纪念版)》《了不起的盖茨比》《假如给我三天光明》等双语典藏类作品;《北京十年:1980-1990》与《鬼刀 WLOP个人插画作品集》则体现其在摄影与艺术领域的布局。作者资源包括安东尼·圣埃克苏佩里、海伦·凯勒、Joshua Kerievsky、王达、张兆增与WLOP等。

目录

  1. 算法篇
  2. 第1章 G1GC是什么(G1GC和实时性、堆结构、执行过程、并发标记和转移)
  3. 第2章 并发标记(标记位图、执行步骤、初始标记阶段、并发标记阶段、最终标记阶段、存活对象计数、收尾工作)
  4. 第3章 转移(转移专用记忆集合、转移专用写屏障、维护线程、热卡片、选择回收集合、根转移、转移、标记信息的作用)
  5. 第4章 软实时性(用户的需求、预测转移时间、预测可信度、GC暂停处理的调度、并发标记中的暂停处理)
  6. 第5章 分代G1GC模式(新生代区域、分代对象转移、分代选择回收集合、最大新生代区域数、GC的切换、GC执行的时机)
  7. 第6章 算法篇总结(关系图、优点、缺点)
  8. 实现篇
  9. 第7章 准备工作(什么是HotSpotVM、什么是OpenJDK、获取源码、代码结构、两个特殊类、适用于各种操作系统的接口)
  10. 第8章 对象管理功能(接口、全貌、CollectedHeap类、CollectorPolicy类、各个GC类)
  11. 第9章 堆结构(VM堆、G1GC堆、常驻空间)
  12. 第10章 分配器(内存分配的流程、VM堆的申请与分配、对象的分配、TLAB)
  13. 第11章 对象结构(oopDesc类、klassOopDesc类、Klass类、对象头)
  14. 第12章 HotSpotVM的线程管理(线程操作的抽象化、Thread类、线程的生命周期、Windows线程的创建)
  15. 第13章 线程的互斥处理
  16. 第14章 GC线程(并行篇)
  17. 第15章 GC线程(并发篇)
  18. 第16章 并发标记的实现
  19. 第17章 转移的实现
  20. 第18章 预测与调度
  21. 第19章 准确式GC的实现
  22. 第20章 写屏障的性能开销

常见问题

这本书和《深入理解Java虚拟机》是同一本吗?
不是。本书是日本作者中村成洋所著、吴炎昌与杨文轩翻译,由人民邮电出版社出版的《深入Java虚拟机:JVM G1GC的算法与实现》,专讲 G1GC;周志明的《深入理解Java虚拟机》覆盖范围更广,作者与结构都不同。
阅读本书需要哪些前置知识?
建议已了解 JVM 内存区域、对象分配与常见 GC 概念,最好使用过 G1 并看过 GC 日志。实现篇涉及 C++ 与 HotSpot 源码,具备一定 C++ 阅读能力和 Linux 线程基础会更顺畅。
书中的实现基于哪个 JDK 版本?
书中以较早的 OpenJDK 版本(G1 在 Java 7 中引入)的 HotSpot 源码为依据,讲解的是 G1 的经典实现结构。较新 JDK 中部分类与调用路径已有调整,但并发标记、转移、预测调度的核心思路仍可对照理解。
这本书偏理论还是偏实战调优?
偏原理与实现,不提供现成的调参清单。它解释 G1 如何并发标记、如何选择回收集合、如何预测暂停时间,读完有助于自己读懂 GC 日志并判断参数含义,但参数实践仍需结合具体应用。
全书篇幅如何,需要多久读完?
中文版正文约二百二十余页,分二十章,篇幅不长但信息密度高。建议预留数周时间,算法篇可较快通读,实现篇配合源码逐章研读会明显拉长时间。

读者评论

查询本书

本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。

同一作者

同类高分