-
阅读客户端:
爱阅读客户端
如果您尚未下载客户端,点击下面图标下载 - 支持阅读载体:
- 评分:
(已有0条评价)
- 纸版书:JVM G1源码分析和调优
- Ebook价:¥45.00
基本信息

【插图】

编辑推荐
由资深Java工程师撰写,来自一线实践经验的结晶
详细分析G1的基本运行原理以及调优方法,讲解细腻,图示丰富,可帮助Java工程师深入理解垃圾回收技术
内容简介
作译者
彭成寒 高级Java工程师,目前主要从事风控系统设计、算法建模、大数据处理等工作。有超过10年的Java和C++开发经验。
目录
第1章 垃圾回收概述 1
1.1 Java发展概述 1
1.2 本书常见术语 4
1.3 回收算法概述 6
1.3.1 分代管理算法 7
1.3.2 复制算法 7
1.3.3 标记清除 8
1.3.4 标记压缩 9
1.3.5 算法小结 9
1.4 JVM垃圾回收器概述 9
1.4.1 串行回收 9
1.4.2 并行回收 10
1.4.3 并发标记回收 10
1.4.4 垃圾优先回收 10
第2章 G1的基本概念 14
2.1 分区 14
2.2 G1停顿预测模型 20
2.3 卡表和位图 22
2.4 对象头 24
前言
本书尝试从G1的原理出发,系统地介绍新生代回收、混合回收、Full GC、并发标记、Refine线程等内容;同时依托于jdk8u的源代码介绍Hotspot如何实现G1,通过对源代码的分析来了解G1提供了哪些参数、这些参数的具体意义;最后本书还设计了一些示例代码,给出了G1在运行这些示例代码时的日志,通过日志分析来尝试调整参数并达到性能优化,还分析了参数调整可能带来的负面影响。
乍听起来,G1非常复杂,应该会有很多的参数。实际上在JDK8的G1实现中,一共新增了93个参数,其中开发参数(develop)有41个,产品参数(product)有31个,诊断参数(diagnostic)有9个,实验参数(experimental)有12个。开发参数需要在调试版本中才能进行验证(本书只涉及个别参数),其余的三类参数都可以在发布版本中打开、验证和使用。本书除了几个用于验证的诊断参数外,覆盖了发布版本中涉及的所有参数,为读者理解G1以及调优G1提供了帮助。
本书共分为12章,主要内容如下:
第1章介绍垃圾回收的发展及使用的算法,同时还介绍一些重要并常见的术语。该章的知识不仅仅限于本书介绍的G1,对于研读JVM文章或者JVM源码都有帮助。
第2章介绍G1中的基本概念,包括分区、卡表、根集合、线程栈等和垃圾回收相关的基本知识点。
第3章介绍G1是如何分配对象的,包括TLAB和慢速分配,G1的对象分配和其他垃圾回收器的对象分配非常类似,只不过在分配的时候以分区为基础,除此之外没有额外的变化,所以该章知识不仅仅适用于G1也适用于其他垃圾回收器,最后介绍了参数调优,同样也适用于其他的垃圾回收器。
第4章介绍G1 Refine线程,包括G1如何管理和处理代际引用,从而加快垃圾回收速度,介绍了Refinement调优涉及的参数;虽然CMS也有卡表处理代际引用,但是G1的处理和CMS并不相同,Refine线程是G1新引入的部分。
第5章介绍新生代回收,包括G1如何进行新生代回收,包括对象标记、复制、分区释放等细节,还介绍了新生代调优涉及的参数。
第6章介绍混合回收。主要介绍G1的并发标记算法及其难点,以及G1中如何解决这个难点,同时介绍了并发标记的步骤:并发标记、Remark(再标记)和清理阶段;最后还介绍了并发标记的调优参数。
第7章介绍Full GC。在G1中,Full GC对整个堆进行垃圾回收,该章介绍G1的串行Full GC和JDK 10之后的并行Full GC算法。
第8章介绍垃圾回收过程中如何处理引用,该功能不是G1独有的,也适用于其他垃圾回收器。
第9章介绍G1的新特性:字符串去重。根据OpenJDK的官方文档,该特性可平均节约内存13%左右,所以这是一个非常有用的特性,值得大家尝试和使用。另外,该特性和JDK中String类的intern方法有一些类似的地方,所以该章还比较了它们之间的不同。
第10章介绍线程中的安全点。安全点在实际调优中涉及的并不多,所以很多人并不是特别熟悉。实际上,垃圾回收发生时,在进入安全点中做了不少的工作,而这些工作基本上是串行进行的,这些事情很有可能导致垃圾回收的时间过长。该章除了介绍如何进入安全点之外,还介绍了在安全点中做的一些回收工作,以及当发现它们导致GC过长时该如何调优。
第11章介绍如何选择垃圾回收器,以及选择G1遇到问题需要调优时我们该如何下手。该章属于理论性的指导,在实际工作中需要根据本书提到的参数正面影响和负面影响综合考虑,并不断调整。
第12章介绍了下一代垃圾回收器Shenandoah和ZGC。G1作为发挥重要作用的垃圾回收器仍有不足之处,因此未来的垃圾回收器仍会继续发展,该章介绍了下一代垃圾回收器Shenandoah和ZGC对G1的改进之处及其工作原理。
本书的附录包含如下内容:
附录A介绍如何开始阅读和调试JVM代码。这里简单介绍了G1的代码架构和组织形式。另外简单介绍了Linux的调试工具GDB,这个工具对于想要了解JVM细节的同学必不可少。
附录B介绍如何使用NMT对JVM内存进行跟踪和调试。这个知识对于想要深入理解JVM内存的管理非常有帮助,另外在实际工作中,特别是JDK升级中我们必须比较同一应用在不同JVM运行情况下的内存使用。
附录C介绍了Java程序员阅读JVM时需要知道的一些C++知识。这里并未罗列C++的语法以及语法特性,仅仅介绍一些C++语言特有的、而Java语言没有的语法,或者Java语言中的使用或理解不同于C++语言的部分语法。这个知识是为Java程序员准备的,特别是为在阅读JVM代码时准备的。
媒体评论
G1中涉及的基本概念,如分区、卡表、根集合、线程栈等。
G1是如何分配对象的,包括TLAB和慢速分配,以及在实践中参数调优的经验。
G1 Refine线程原理和参数调优。
G1如何进行新生代回收,包括对象标记、复制、分区释放等详细过程。
G1的并发标记算法和步骤,以及对参数调优进行了综合分析。
G1的串行FGC和JDK 10之后的并行FGC算法。
G1和其他垃圾回收器的比较,以及下一代垃圾回收器:JDK 11中引入的ZGC和JDK 12中引入的Shenandoah。