具体描述
《Java性能调优指南》主要展示了如何在当今先进的多核硬件和复杂的操作系统环境下,系统且主动地提高Java性能。本书对Charlie Hunt 和Binu John的经典图书《Java Performance》进行延伸,提供了两个前所未有的、强大的Java平台创新细节:Garbage First(G1)垃圾收集器和HotSpot虚拟机服务代理。
阅读《Java性能调优指南》,你就可以在任何情况下从JDK8或9中发挥Java的最大性能。
作者简介
Charlie Hunt(芝加哥,伊利诺伊州)目前是一名在Oracle主导各种Java SE和HotSpot VM项目的JVM工程师,他的首要关注点在维持吞吐量和延迟的同时减少内存占用量。他也是JavaTM Performance 一书的第一作者。他是JavaOne大会的常任主持,并被公认为是Java超级明星。他同样是很多会议的发言人,包括QCon、Velocity、GoTo和Dreamforce。Charlie之前为Oracle主导过各种Java SE和HotSpot VM项目,经历过多个不同性能的岗位,包括在Salesforce.com担任性能工程架构师,以及在Oracle和Sun Microsystems担任HotSpot VM性能架构师。他在1998年写下了他的第一个Java应用程序,在1999年作为Java高级架构师加入Sun Microsystems,从那以后一直对Java和JVM的性能抱有热情。
Monica Beckwith是一位独立的性能顾问,主要从事优化基于Java虚拟机的服务级系统的客户应用程序。她过去的工作经历包括Oracle、Sun Microsystems和AMD。Monica曾经从事用Java HotSpot VM优化JIT编译器、生成代码、JVM启发式算法,以及垃圾收集和垃圾收集器方面的工作。她是许多会议上的固定发言人并多次发表主题为垃圾收集、Java内存模型等的文章。Monica领导过Oracle的G1垃圾收集器性能团队,并被人称为JavaOne摇滚明星。
Poonam Parhar (圣克拉拉,加利福利亚州)现在是一名在Oracle的JVM支持工程师,她的主要工作职责是解决针对JRockit和HotSpot VM的客户升级问题。她喜欢调试和排除故障,并且一直关注着HotSpot VM适用性和可维护性的提升。她明确了HotSpot VM里很多复杂的垃圾收集问题,并且为了能更方便进行故障排除和修复垃圾收集器相关的问题,她一直致力于提升调试工具和产品可维护性。她为可适用性代理调试器做出很多贡献,并为它开发了一个VisualVM插件。她在2011年的JavaOne会议上分享了“适用于SA 的VisualVM插件”。为了帮助客户和Java社区,她通过在https://blogs.oracle.com/poonam/上维护博客来分享自己的工作经验和知识。
Bengt Rutisson(斯德哥尔摩,瑞典)是一名Oracle的JVM工程师,他在HotSpot工程团队工作。过去十年一直从事关于JVM里的垃圾收集器的工作,他最初接触的是JRockit VM,随后六年使用HotSpot VM。Bengt是OpenJDK项目中的积极参与者,在特性、稳定性修复以及性能增强方面做出了许多贡献。
目录信息
致谢 IX
作者介绍 XII
第1章 Garbage First综述 1
术语 1
并行垃圾收集器 2
串行垃圾收集器 4
并发标记清除(CMS)垃圾收集器 5
收集器的概括总结 7
Garbage First(G1)垃圾收集器 8
G1设计 10
巨型(Humongous)对象 12
Full垃圾收集 12
并发周期 13
堆空间调整 13
引用 14
第2章 深入Garbage First垃圾收集器 15
背景 15
G1中的垃圾收集 16
年轻代 17
年轻代收集暂停 18
对象老化与老年代 19
巨型分区 19
混合收集 22
收集集合及其重要性 24
已记忆集合及其重要性 24
并发优化线程以及栅栏 28
G1 GC的并发标记 30
并发标记阶段 34
初始标记 34
根分区扫描 34
并发标记 34
重新标记 36
清除 36
转移失败与Full收集 37
引用 38
第3章 Garbage First垃圾收集器性能优化 39
年轻代收集的各阶段 39
所有并行活动的开始 41
外部根分区 42
已记忆集合和已处理缓冲区 42
已记忆集合总结 44
转移和回收 47
终止 47
GC外部的并行活动 48
所有并行活动总结 48
所有串行活动的启动 48
其他串行活动 49
年轻代调优 50
并发标记阶段调优 52
混合垃圾收集阶段回顾 54
混合垃圾收集阶段调优 56
避免转移失败 59
引用处理 60
观察引用处理 60
引用处理调优 62
引用 65
第4章 The Serviceability Agent 67
SA是什么 67
为什么要用SA 68
SA组件 68
JDK中的SA二进制文件 69
SA的JDK版本说明 69
SA如何获得Hotspot虚拟机的内部数据结构 70
SA版本对照 71
SA调试工具 72
HSDB 72
HSDB工具 80
命令行Hotspot调试器CLHSDB 100
其他工具 103
CoreDump和崩溃Dump文件 109
调试非本地生成的Core文件 109
SA的共享库问题 110
消除共享库问题 110
SA的系统属性 111
SA的环境变量 113
JDI实现 114
扩展SA工具 115
VisualVM的SA插件 118
VisualVM中怎样安装SA插件 119
SA插件使用 119
SA插件功能 120
用SA做故障分析 124
内存溢出错误分析 124
诊断语言层死锁 132
事后分析Hotspot虚拟机崩溃 137
附录 虚拟机命令行附加参数探秘 145
索引 155
· · · · · · (收起)
读后感
用户评价
我花了大量时间试图理解作者想要传达的核心思想,但收效甚微。全书充斥着大量未经考证的、过于绝对化的论断,并且这些论断往往缺乏坚实的理论支撑或实际案例的佐证。举例来说,书中提到某个优化技巧能带来“惊人的提升”,但对于这个提升的量化标准、适用的场景以及潜在的副作用,作者却语焉不详,描述得如同玄学一般。代码示例的质量也令人失望,很多片段显得陈旧且与现代的Java生态格格不入,甚至有些地方存在明显的语法错误或不符合当前最佳实践的写法,这对于一本宣称提供“指南”的图书来说,无疑是致命的缺陷。这种“知其然而不知其所以然”的讲解方式,只会让初学者感到更加困惑,而有经验的开发者则会直接将其视为笑谈。
这本书的排版和设计简直是一场视觉的灾难,装帧质量也让人不敢恭维。内页的纸张粗糙得像砂纸,油墨的质量也参差不齐,有些地方印刷得模糊不清,简直是在考验读者的视力。更令人沮丧的是,章节之间的过渡生硬得如同强行拼凑,结构混乱,逻辑链条时断时续,让人完全抓不住重点。打开书本,首先映入眼帘的就是那些密密麻麻、毫无重点的文字堆砌,仿佛作者只是机械地将一堆零散的资料倾倒在纸面上,缺乏任何梳理和提炼的用心。目录的设计也极其敷衍,标题之间缺乏层次感,让人根本无法预判内容的深度和广度。拿到手里沉甸甸的,但翻开后却只想放下,完全没有阅读下去的欲望,这本实体书的体验感差到令人发指,简直是对“阅读体验”这个概念的公然冒犯。
从内容组织上来看,本书的章节划分和知识点推进缺乏清晰的脉络和渐进性。它似乎更像是一本技术备忘录的集合,而不是一本系统性的学习教材。前面对基础概念的讲解还算勉强可以接受,但一旦进入到深入的、需要系统性理解的性能剖析层面,内容的跳跃性就变得非常突兀。例如,一个重要的JVM内存模型概念可能被割裂地分散在三个不相关的章节中,读者需要自己花费巨大的认知负荷去重建这些知识之间的联系。这种“打散重组”的编排方式,极大地增加了读者的学习成本,使得原本可以通过逻辑梳理清晰呈现的知识体系变得支离破碎,让人感到极其不连贯和费力。
这本书的叙述风格极其冗长和啰嗦,仿佛作者极力想用最复杂的语言来阐述最简单的概念。每一个技术点都要用长达数页的篇幅进行铺垫、绕圈子,真正的干货却被淹没在大量的、与主题关系不大的背景介绍和个人感想之中。阅读过程就像是走在一条布满碎石的、没有明确指示的长路上,每走一步都需要付出额外的精力去分辨哪些是路面,哪些是杂草。更糟糕的是,作者似乎对术语的准确性把握不够,频繁地混用一些容易引起歧义的词汇,导致我在理解某些关键机制时,不得不反复查阅其他更权威的资料进行交叉验证,这完全违背了购买技术书籍以求快速获取知识的初衷。
坦白说,这本书的“新颖性”几乎为零。书中引用的理论、分析的方法,以及展示的工具集,都停留在数年前的技术基线上。在瞬息万变的软件行业,尤其是在JVM技术日新月异的今天,这种滞后的内容简直是误导读者。我期待能看到关于最新版本JVM特性、现代垃圾回收器(如ZGC或Shenandoah)的深度剖析,或是针对新型并发框架和微服务架构下的性能瓶颈分析,然而这些内容在书中完全找不到影子。与其说这是一本“指南”,不如说它更像是一份对过往技术的考古记录。对于希望跟上行业前沿的开发者而言,这本书提供的价值微乎其微,简直是一种时间的浪费,让人感觉像是在阅读一本泛黄的、过时的技术文档。
主要是介绍了些G1,并没有展开介绍;前两章,里面介绍了很多G1的具体参数,对G1有了一个大致的了解。第三章给出了一些经验,列举了一些调优的参数。第四章主要是SA的工具使用。这本书更偏向于实战性,直接给出解决方案,理论介绍相对薄弱一些。
主要是介绍了些G1,并没有展开介绍;前两章,里面介绍了很多G1的具体参数,对G1有了一个大致的了解。第三章给出了一些经验,列举了一些调优的参数。第四章主要是SA的工具使用。这本书更偏向于实战性,直接给出解决方案,理论介绍相对薄弱一些。
不要被书名误导,其实讲的是gc1以及gc调优。可惜书跟很薄,很多东西没有展开来讲。翻译还可以,语录基本通顺。
對GC或Jvm應深入了解,並應用在實際中。
對GC或Jvm應深入了解,並應用在實際中。