具体描述
G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。
《深入理解JVM & G1 GC》主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,这就需要有综合能力的程序员。《深入理解JVM & G1 GC》作者力求做到知识的综合传播,而不是仅仅针对Java虚拟机和GC调优进行讲解,也力求每一章节都有实际的案例支撑。《深入理解JVM & G1 GC》具体包括以下几方面:JVM基础知识、GC基础知识、G1 GC的深入介绍、G1 GC调优建议、JDK自带工具使用介绍等。
通读《深入理解JVM & G1 GC》后,读者可以深入了解G1 GC性能调优的许多主题及相关的综合性知识。读者也可以把《深入理解JVM & G1 GC》作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。
作者简介
周明耀,12年投资银行项目、分布式计算项目工作经验,IBM开发者论坛专栏作者、InfoQ专栏作者。一名IT技术狂热爱好者,一名顽强到底的工程师。推崇技术创新、思维创新,对于新技术非常热爱,致力于技术研发、研究,通过发布文章、书籍、互动活动的形式积极推广软件技术。欢迎添加微信共同探讨IT技术话题。
目录信息
前言 IX
第1章 JVM & GC基础知识 1
1.1 引言 2
1.2 基本术语 3
1.2.1 Java相关术语 4
1.2.2 JVM/GC通用术语 24
1.2.3 G1涉及术语 56
1.3 本章小结 62
第2章 JVM & GC深入知识 63
2.1 Java虚拟机内存模型 64
2.1.1 程序计数器 65
2.1.2 虚拟机栈 66
2.1.3 本地方法栈 72
2.1.4 Java堆 73
2.1.5 方法区 79
2.2 垃圾收集算法 82
2.2.1 引用计数法 82
2.2.2 根搜索算法 83
2.2.3 标记-清除算法(Mark-Sweep) 85
2.2.4 复制算法(Copying) 87
2.2.5 标记-压缩算法(Mark-Compact) 89
2.2.6 增量算法(Incremental Collecting) 90
2.2.7 分代收集算法(Generational Collecting) 91
2.3 Garbage Collection 92
2.3.1 GC概念 92
2.3.2 垃圾收集器分类 93
2.3.3 Serial收集器 94
2.3.4 ParNew收集器 96
2.3.5 Parallel收集器 99
2.3.6 CMS收集器 102
2.3.7 Garbage First(G1)GC 106
2.4 常见问题解析 112
2.4.1 jmap -heap或-histo不能用 112
2.4.2 YGC越来越慢 112
2.4.3 Java永久代去哪儿了 114
2.5 本章小结 116
第3章 G1 GC应用示例 117
3.1 范例程序 118
3.2 选项解释及应用 124
3.3 本章小结 166
第4章 深入G1 GC 167
4.1 G1 GC概念简述 168
4.1.1 背景知识 168
4.1.2 G1的垃圾回收机制 169
4.1.3 G1的区间设计灵感 169
4.2 G1 GC分代管理 172
4.2.1 年轻代 172
4.2.2 年轻代回收暂停 173
4.2.3 大对象区间 174
4.2.4 混合回收暂停 176
4.2.5 回收集合及其重要性 178
4.2.6 RSet及其重要性 178
4.2.7 并行标记循环 182
4.2.8 评估失败和完全回收 186
4.3 G1 GC使用场景 186
4.4 G1 GC论文原文翻译(部分) 187
4.4.1 开题 187
4.4.2 数据结构/机制 188
4.4.3 未来展望 190
4.5 本章小结 191
第5章 G1 GC性能优化方案 192
5.1 G1的年轻代回收 193
5.2 年轻代优化 203
5.3 并行标记阶段优化 205
5.4 混合回收阶段 207
5.4.1 初步介绍 207
5.4.2 深入介绍 208
5.5 如何避免出现GC失败 210
5.6 引用处理 211
5.6.1 观察引用处理 212
5.6.2 引用处理优化 213
5.7 本章小结 214
第6章 JVM诊断工具使用介绍 215
6.1 SA基础介绍 216
6.2 SA工具使用实践 217
6.2.1 如何启动SA 217
6.2.2 SA原理及使用介绍 222
6.3 其他工具介绍 231
6.3.1 GCHisto 231
6.3.2 JConsole 232
6.3.3 VisualVM 236
6.4 本章小结 238
· · · · · · (收起)
读后感
作为一个读者,书没有读完,愤懑满怀。 作者不仅对自己书中所写的内容没有摸透,还堂而皇之出书教人,已经可以说是没有公德心了。 书中章节混乱,文不对题,常识性错误不断,大量粘贴无用代码充页数,而且一个技术书籍, 扯各种没用的还不着边际的干啥? 摘抄几句如下: “作为...
作为一个读者,书没有读完,愤懑满怀。 作者不仅对自己书中所写的内容没有摸透,还堂而皇之出书教人,已经可以说是没有公德心了。 书中章节混乱,文不对题,常识性错误不断,大量粘贴无用代码充页数,而且一个技术书籍, 扯各种没用的还不着边际的干啥? 摘抄几句如下: “作为...
作为一个读者,书没有读完,愤懑满怀。 作者不仅对自己书中所写的内容没有摸透,还堂而皇之出书教人,已经可以说是没有公德心了。 书中章节混乱,文不对题,常识性错误不断,大量粘贴无用代码充页数,而且一个技术书籍, 扯各种没用的还不着边际的干啥? 摘抄几句如下: “作为...
作为一个读者,书没有读完,愤懑满怀。 作者不仅对自己书中所写的内容没有摸透,还堂而皇之出书教人,已经可以说是没有公德心了。 书中章节混乱,文不对题,常识性错误不断,大量粘贴无用代码充页数,而且一个技术书籍, 扯各种没用的还不着边际的干啥? 摘抄几句如下: “作为...
作为一个读者,书没有读完,愤懑满怀。 作者不仅对自己书中所写的内容没有摸透,还堂而皇之出书教人,已经可以说是没有公德心了。 书中章节混乱,文不对题,常识性错误不断,大量粘贴无用代码充页数,而且一个技术书籍, 扯各种没用的还不着边际的干啥? 摘抄几句如下: “作为...
用户评价
这本新近问世的编程读物,光是书名就让人心头一震,它仿佛在向每一个在Java世界摸爬滚打多年的开发者发出邀请函——挑战那些藏在虚拟机深处的秘密,拥抱那些决定应用性能生死的底层逻辑。我拿到这本书时,首先被它厚重的质感和严谨的排版所吸引,这绝不是那种走马观花的“速成”指南,它透着一股子老派技术书籍的扎实劲儿。随手翻开任何一页,都能感受到作者对JVM运行机制那种近乎偏执的细致入微。比如,它对类加载过程的剖析,简直像是在解剖一台精密仪器,从双亲委派模型到自定义加载器的实现细节,没有一个环节是含糊其辞的,甚至连一些边缘情况下类加载失败的异常栈追踪都写得明明白白。对于我们这些常年与内存泄漏、CPU高占用率打交道的人来说,这种对基础理论的深度挖掘,才是构建健壮系统的基石。读完前几章,我感觉自己对以往模糊理解的“对象在堆里怎么存活”这件事,有了一种全新的、清晰的画面感,那些曾经令人头疼的内存模型概念,此刻变得触手可及。这种从宏观到微观,层层递进的叙述方式,让初学者望而生畏的JVM,瞬间变得可被驾驭和理解。
最让我感到惊喜的是,作者在内容的前沿性上保持了极高的敏感度。在如今多核、大内存已成为常态的背景下,仅仅停留在老版本的JVM特性上是远远不够的。这本书显然是紧跟最新的JDK版本迭代的,对于一些较新的特性,比如ZGC或Shenandoah等低延迟收集器的设计哲学和实现细节,都有着令人信服的分析。它没有停留在“它们很快”的表层介绍,而是深入剖析了这些收集器是如何通过并发扫描、读屏障等技术,最大程度地减少STW(Stop-The-World)时间,从而满足现代互联网应用对响应速度的苛刻要求。这种与时俱进的视角,使得这本书不仅仅是一本回顾经典的技术参考书,更像是一份面向未来的性能优化蓝图。它鼓励读者跳出自己目前所使用的JDK版本限制,去思考未来平台可能的发展方向,这对于保持自身技术栈的活力和前瞻性,提供了不可或缺的指导。
坦白讲,市面上关于Java虚拟机的书籍并不少见,但大多流于表面,只会停留在概念的罗列,真正能把“为什么”和“怎么做”讲透彻的凤毛麟角。然而,这本书的特别之处在于,它并没有沉溺于理论的空中楼阁,而是非常务实地将这些复杂的机制与实际的调优场景紧密结合。它不是让你死记硬背JVM规范,而是教你如何像一位经验丰富的现场工程师那样去思考问题。我印象特别深刻的是其中关于JIT(Just-In-Time)编译的章节,作者没有简单地介绍C1和C2编译器的区别,而是深入探讨了逃逸分析、内联展开等优化策略是如何影响最终机器码的生成效率。书中甚至模拟了几个经典的性能瓶颈案例,然后引导读者一步步运用书中介绍的知识点进行诊断和修复,这种“手把手”的实战教学,远比单纯的理论阐述来得有效得多。对于那些想要从“会用Java”进阶到“精通Java”的工程师而言,这本书提供的是一套完整的、可复用的高性能调优方法论,它教会你的不是一个现成的答案,而是一套探究真理的思维框架。
总的来说,这本书的价值远超其书本本身的定价。它不仅仅是技术知识的载体,更像是一份资深工程师职业生涯的经验结晶,浓缩了作者在无数次线上故障排查和系统优化中积累的深刻洞察。我个人在使用这本书的过程中,已经开始尝试在自己的项目中引入一些作者强调的调优策略,并且已经看到了立竿见影的性能提升。它提供了一种“内建信心”的力量,让你在面对复杂系统崩溃时,不再是盲目地重启或猜测,而是能迅速定位到是内存回收策略出了问题、还是即时编译器的偏向性导致了性能热点。这本书的深度足以让资深开发者受益匪浅,同时其清晰的逻辑和循序渐进的讲解方式,也为渴望深入理解系统本质的新晋高手们铺设了一条坚实的阶梯。它无疑是当前Java技术栈领域,一本重量级且不可或缺的经典之作。
这本书的文字风格有一种独特的韵律感,不似某些技术文档那样干巴巴地堆砌术语,它更像是一位资深架构师在深夜茶室里与后辈的促膝长谈。虽然内容极其硬核,但作者总能找到巧妙的比喻来解释那些晦涩难懂的概念。举例来说,描述垃圾收集器的工作流程时,它没有直接套用官方文档的复杂术语,而是用了一种非常生动的比喻来描绘对象生老病死的过程,让人在会心一笑之余,深刻地理解了新生代、老年代的划分逻辑及其背后的性能权衡。这种将冰冷的机器逻辑赋予人情味和画面感的叙事能力,极大地降低了读者的学习曲线。此外,本书在排版上也下足了功夫,关键的代码片段和内存布局图示清晰明了,色彩搭配得当,避免了因为视觉疲劳而导致注意力涣散。阅读体验的流畅性,对于这种深度技术书籍来说至关重要,这本书在这方面做得非常出色,让我愿意沉下心来,一口气读完一个章节而不知疲倦。
这书是真的垃圾,别看了
还可以,虽然我并没有深入了解JVM.
复习
这书是真的垃圾,别看了
第二章讲的清楚一些,其他章节有点乱