没有捷径可走的 Java 性能优化

多年来,用 Google 搜索 Java performance tuning,出现的 3 篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 Google 搜索引擎出现早期就被纳入其索引中。之所以一直在搜索结果中排在前列,是因为其初始排名比较高,带来了很多访问,而这些访问又反过来提升了其排名。

但是,该页面上提供的建议已经完全过时,不再成立,很多情况下甚至对应用程序有害。然而,因为该页面在搜索结果中的有利位置,很多开发人员能看到它,所以他们很有可能受到这些糟糕建议的影响。

同理,如今朋友圈广泛传播一些诸如「性能优化宝典」「大厂优化秘籍」「X 大优化技巧」之类的文章,被一些刚开始接触 Java 性能优化的读者奉为圭臬,而实际情况是什么呢?

  • JVM 没有神奇的开关,让你的代码变得“更快”
  • 没有让 Java 运行更快的“秘诀与技巧”
  • 没有对你隐藏的秘密算法

如果有一本关于 Java 性能优化的书一开始就这样跟你兜底,你应该认真地读读,因为作者们看起来相当实在。他们继续,这不是一本代码性能技巧手册,相反,聚焦于好的性能工程所涉及的方方面面:

  • 整个软件生命周期内的性能方法论
  • 适用于性能的测试理论
  • 度量、统计和工具
  • 分析技能(包括系统和数据)
  • 底层的技术与机制

那么书中有没有直接上手的代码呢?有是有,但是,作者说了,用之前你要三思:书的后半部分会引入一些启发式的代码级优化技术,不过这些技术都附带了开发人员在使用之前应该注意的警告和权衡。

持有这种理念的 3 位作者都是资深 Java 工程师(有两位 Java Champion 得主)。他们的基本认识是——性能优化是一门实验科学:JVM 性能调优是技术、方法论、可测的量和工具的综合。它的目的是以系统所有者或用户所期望的方式产生可以测量的输出。

更进一步,如果考虑到人的因素,性能优化是坚实的经验主义和软性的人类心理学的奇异组合。重点在于,一方面是可观测指标的绝对数字,另一方面是最终用户和干系人如何看待这些数字。而这本书就是要聚焦如何解决这一明显的悖论。

光是看到这里,我觉得你可以考虑入手这本书了,一本好书,作者持有的基本理念就会让你欢呼雀跃。

enter image description here

| 图书特色

  • Java 性能优化领域经典作品
  • Amazon 4.5 星好评图书
  • 不仅调优,还有编码相关内容,涉及 JIT 编译、语言性能等

作译者简介
本杰明· J. 埃文斯(Benjamin J. Evans)
初创公司 jClarity 联合创始人和技术 Fellow,获得过 Java Champion 荣誉和 JavaOne Rockstar 奖,《Java程序员修炼之道》合著者。
詹姆斯·高夫(James Gough)
Java 开发者和技术图书作者,任职于摩根士丹利,专注构建面向客户的技术。
克里斯·纽兰(Chris Newland)
JITWatch 项目作者,Java Champion 荣誉得主,ADVFN 高级开发者和团队负责人,擅长使用 Java 来处理实时的股市数据。
译者 | 曾波
互联网架构师,拥有 13 年互联网从业经验,曾任职于微软、什么值得买、京东金融、鹏博士电信传媒集团,曾参与多家公司的技术团队从建立到成熟的过程,主持实施了重大技术决策和技术落地,在大规模复杂系统架构和技术管理方面拥有丰富的实践经验。

本书从实验科学的角度探讨了Java 性能优化的方方面面,重点阐述了最新的实用 JVM 性能调优策略、工具和技巧。通过本书,我们不仅可以了解 Java 原理和技术如何充分利用现代硬件和操作系统、衡量 Java 性能的陷阱以及微基准测试的弊端有哪些,还能深入研究可能使团队烦恼的几种性能测试和常见反模式、JVM 垃圾收集、JIT 编译和 Java 语言性能技术等。

译者曾波特意在本书出版之时送给读者一段话:

2018 年 8 月,不经意间翻阅了一本名为 Optimizing Java: Practical Techniques for Improved Performance Tuning 的书,震惊于书中描述的系统性 Java 性能优化知识,于是迫切希望能将 3 位作者的理念与方法传达给国内的 Javaer。现在《Java性能优化实践:JVM调优策略、工具与技巧》中文版已经上架,希望这本书能够转化为你的性能调优利器,为项目带去真正的价值。对此,我深信不疑,毕竟,性能优化是一个常谈常新的话题,而这本书可以历经时间的考验。

业内大佬倾力推荐

那具体说来,这本书写得怎么样呢?在本书还没有出版之前,国内外 Java 领域的不少大佬就抢读了这本书,他们怎么看?他们在解决性能优化问题的过程中最在意哪些因素?他们是如何切入问题的?接下来,咱们来一睹他们在这个问题上的洞见。

推荐序作者 Charlie Nutter

红帽中间件首席软件工程师、为英文版作序的 Charlie Nutter,以一个特别的视角回顾了 Java 技术发展的历程,为我们解决如今的性能问题指明了方向:

而现在,性能问题的答案是了解你的工具。通常这意味着你不但要了解 Java 语言是如何工作的,还要知道 JVM 类库、内存、编译器、垃圾收集器和应用程序运行所在的硬件是如何交互的。在我从事 JRuby 项目的工作中,我学到一个有关 JVM 的不变的真理:所有的性能问题都没有单一的解决方案,而是多种解决方案的组合。技巧就是找到那些方案,并把最能满足要求的拼凑起来。现在你有了一个应对性能之战的秘密武器,就是你要阅读的这本书。

推荐序作者臧秀涛

与本书作译者都颇有渊源的 InfoQ 技术大会主编臧秀涛,既对图书理念进行了透彻分析,又点出了部分读者的学习误区,最后强调了性能工具的重要性:

我感觉本书的最大价值在于作者们所要传达的理念。在性能调优方面,没有任何灵丹妙药。任何性能决策,都要通过合理的性能测试来检验。本书不止一次提到,读者不能盲目使用书中结论,如果要在自己的项目中应用,必须亲自通过实验来检测。
本书有些章节经常让人会心一笑,比如在第 4 章讲到性能反模式的地方,有一条叫“按照坊间传说调优”。大家可能有过这种经验,时不时就会在朋友圈看到有人转发“优化 Java 的 xxx 条规则”,诸如“尽量重用对象”“尽量用 final”之类,倒是简单好记,但细究起来,很多是十多年前的“野路子”,没有明确的适用范围,仿佛放之四海而皆准,可叹这种坊间传说还颇有市场。希望本书能够荡涤这种风气。
本书提到的很多性能工具也是读者应该重点关注的。像 JITWatch 以及各种剖析工具,本书分门别类给出了介绍和建议,对于读者深入理解 JVM 和定位性能问题的根源都极具价值。建议读者认真研究,也将它们放入自己的工具箱中,使其成为性能调优的利器。
纸上得来终觉浅,绝知此事要躬行。期待本书能给大家带来真正的价值。

推荐序作者江南白衣

唯品会架构专家江南白衣(肖桦),点评了本书的核心价值,强调了掌握底层原理的重要性,并以极为“诗意”的大串烧列出了大家常用的重要工具:

如果光看书名,特别是英文版书名,大家可能会觉得这是一本 recipes、cookbooks、tips、tricks 以及各种零零碎碎解决特定问题的知识点大杂烩,但翻开目录,可以看出 3 位合著者很用心地给大家展示了一个关于 Java 性能优化的更完整的知识框架。
借用书中的一句话:“要成为一名赛车手,你不必成为工程师,但是一定要有机械共鸣。”“机械共鸣”这一说法来自伟大的赛车手 Jackie Stewart,他曾 3 次获得世界汽车联合会一级方程式锦标赛冠军。他相信最佳车手对机械如何工作有足够的理解,所以能与赛车协调一致。你不必熟读 The Java Language Specification,不必成为 R 大(R 大在我们这群人中就是神),但对于 JVM,必须知道它如何编译、如何运行、如何垃圾收集。
本书除了对原理进行描述外,还对工具做了介绍。从我见过最详尽的 JMH 介绍到 JITWatch,甚至 jHiccup 都在本书中出现了,而在看到作者们列出 JProfiler 和 YourKit 后,将它们大手一挥归到传统 Profiler 中去,然后 Async Profiler 的登场,让我放下了心。
祝每位 Java 程序员读完本书后,都一边享受 Java 成熟的类库,一边感受 JIT 不输于 C++/ Rust 们 AOT 预编译的硬气,一边赞美最新 JDK 的垃圾收集工具 ZGC,一边等待 JVM 协程项目 Loom 的落地,事有不谐时一起拿出火焰图工具 Async Profiler 和线上诊断工具 Arthas 找瓶颈,最后都写出自己性能灿烂的代码。

推荐者杨卫华

微博研发副总经理、中国计算机学会 CCF TF架构 SIG 主席杨卫华(Tim Yang),言简意赅地指出了性能优化的重要性:

架构师非常注重服务稳定,重点之一就是保障 Java 体系的性能,本书是深入了解性能不错的参考指南。

推荐者你假笨

IT 系统稳定性保障厂商 PerfMa CEO、知名性能优化领域专家你假笨(寒泉子),突出了“要做好性能优化,技术原理和方法论两手都要硬”:

性能优化是一个永恒的话题。Java 作为使用最广的一门语言,在社区生态更是积攒了非常多宝贵的经验。如果既能懂系统,又懂技术原理,对性能调优的帮助将是非常大的。本书从技术原理和方法论的角度阐述了Java 性能的关键点,值得一读。

推荐者李鑫

天弘基金移动平台技术总监兼首席架构师、《微服务治理:体系、架构及实践》作者李鑫,提到了本书丰富的优化策略及实践可帮你直达本源:

这本关于 Java 性能的优秀译作提供了丰富的优化策略和实践手段,能助你拨开技术迷雾,直达本源,是有志于深耕 Java 性能领域的朋友的不二之选!

推荐者吴晟

tetrate.io 创始工程师、Apache SkyWalking 创始人、项目 VP 吴晟,帮助大家提取出了实践性能优化应该掌握的多个维度的知识:

理解 Java 性能优化理论和方法,对保障在线服务性能起着至关重要的作用。本书从 JVM 内部原理、测试和优化方法、JVM 的未来方向,多纬度介绍了性能优化的方法与理论。推荐广泛的 Java 开发者和 JRE 使用者阅读学习。

推荐者张亮

京东数科数字技术中心架构专家,Apache ShardingSphere、ElasticJob 创始人 & PMC Chair 张亮,特别指出了性能对于大型系统的重要性:

合抱之木,生于毫末。没有夯实基础的沉淀,不足以成长为参天大树。
性能是衡量大型系统的重要指标,也是识别一个技术从业者良莠的标准。本书着墨于性能优化,并在博大精深的 Java 体系中,系统性地将其完整呈现。
译者通过自身多年的积累,将书中内容与自身领悟相结合,奉献了一本中文领域的优秀基础类技术翻译作品。
本书适合有志于向更深层次 Java 技术迈进的从业者阅读。

推荐者赵云霄

京东零售技术与数据中台高级技术专家赵云霄,道出了 Java 调优神秘晦涩的现状,以及本书如何有效帮助解决这个问题:

长久以来,对于 Java 程序的调优,都由团队中那些经验丰富的大牛完成。深深地依赖个人经验以及充满不确定性的各种尝试,留下的也只是一些案例形式的记录,很难有效地指导其他人进步。《Java性能优化实践》这本书,比较完美地将 Java 程序调优工作理论化,并在理论的基础上介绍了可选择的工具,让 Java 调优工作不再神秘晦涩。

推荐者杨晓峰

腾讯专家工程师、JVM 研发负责人,中国计算机学会(CCF)系统软件专委委员,OpenJDK Committer 杨晓峰,强调了本书 3 位作者丰富的行业经验和一线生产调优经验:

本书是不可多得的经典著作,由 3 位久负盛名、具备深刻行业经验的 Java Champion 出品,系统性阐述了 Java 应用性能的方方面面,以及性能评估分析的方法论与工具,尤其非常难得地提供了最新的 JVM 领域知识和一线生产调优经验。本书深度恰到好处,体系化的内容非常适合中高级 Java 工程师、架构师或者性能工程师的工作学习进阶需求。

推荐者葛胜利

京东泰国 CTO 葛胜利(Victor)阐述了这本书的核心板块和内容特色:

本书专注于 Java 程序优化方法,深度剖析 JVM 原理:从底层的操作系统及 JVM 的原理与监控方法,到性能测试技巧,再到性能优化实践。内容从浅到深,具有层次性和连贯性。本书带你了解 JVM 底层机制,改善程序的运行性能。无论你是刚接触 Java 的开发者还是资深的架构师,都能从中有所收获。

推荐者王启荣

北京力码科技联合创始人兼 CIO 王启荣指出了这本书的实战性和经典性:

本书内容由浅入深、从不同的层面来讲解 Java 性能优化,图文并茂、案例丰富,能够让读者知其然知其所以然,对后续工作有很强的指导性,适合中、高级以上开发人员反复研读。

推荐者孙玄

奈学教育创始人 & CEO,前 58 集团技术委员会主席孙玄强调了本书对于性能优化哲学本质的展现:

本书是 Java 性能领域的实践类好书,深入浅出剖析了 Java 性能优化的生态状况,方便同学们真正掌握性能优化的哲学本质,从而在面向不同业务场景时,能够给出优雅的性能优化解决方案,真正达到为企业降本增效的目的。
译者曾波一直从事 Java 性能研发工作,是性能领域绝对的资深专家,由他翻译这本书,相信会给大家带来更完善的阅读体验。

推荐者朱忠华

《深入理解Kafka:核心设计与实践原理》《RabbitMQ实战指南》作者朱忠华指出了如今 Java 性能问题的普遍性:

Java 性能优化是一个老生常谈的话题,尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。本书从各个角度,由表及里地为读者透析 Java 性能优化的本质,相信大家在读完本书之后会对此有一个更深层次的认知。

推荐者王晔倞

好买财富架构总监、公众号「头哥侃码」作者王晔倞突出了性能问题的严重性,以及这本书可以提供的帮助:

在日常工作中我们常说“让 Java 应用程序运行是一回事,但让它们跑得快就是另外一回事”。在面向对象的环境中,性能问题就像来势凶猛的野兽。
通过学习这本书,读者们可以深入浅出剖析 Java 性能优化生态,并从原理、监控、测试技巧等不同维度寻找最优化的实践方案,从而制服野兽。
无论你是老司机还是初学者,相信都能在书中找到你需要的。

推荐者张开涛

《亿级流量网站架构核心技术》作者张开涛着重强调了业务复杂性、系统稳定性为性能优化带来的难度:

业务复杂性越高,伴随带来的系统稳定性就越脆弱,性能要求也越高,非常小的一个性能问题就可能导致服务集群滚雪球式地雪崩。而业务复杂性、系统复杂性、环境复杂性等都会导致性能优化这件事情并没那么简单。测试环境性能压测非常好,但是一到线上各种问题就频发,到底哪里出了问题呢?本书体系化地总结了一套 Java 性能优化的方法论,大家按照本书实践,在性能优化上可以达到事半功倍的效果。

推荐者肖宇

分布式事务开源项目 Hmily、网关开源项目 Soul 创始人,Apache ShardingSphere Committer 肖宇从原书设计和译文角度指出了这本书的难能可贵之处:

《Java性能优化实践》是每个 Java 程序员不可多得的必读经典之作。而曾波的翻译,简单清晰,词文准确,大道至简。本书降低了国内读者的语言学习成本,为大家解决性能问题带来了福音。

诸位老师虽大多是三言两语,但已有画龙点睛之效。如果你有棘手的 Java 性能问题需要解决,或者你只是想深入理解 Java 技术,这本书值得常备手边。