没有捷径可走的 Java 性能优化
多年来,用 Google 搜索 Java performance tuning,出现的三篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 Google 搜索引擎出现早期就被纳入其索引中。之所以一直在搜索结果中排在前列,是因为其初始排名比较高,带来了很多访问,而这些访问又反过来提升了其排名。
但是,该页面上提供的建议已经完全过时,不再成立,很多情况下甚至对应用程序有害。然而,因为该页面在搜索结果中的有利位置,很多开发人员能看到它,所以他们很有可能受到这些糟糕建议的影响。
同理,如今朋友圈广泛传播一些诸如「性能优化宝典」「大厂优化秘籍」「X 大优化技巧」之类的文章,被一些刚开始接触 Java 性能优化的读者奉为圭臬,而实际情况是什么呢?
JVM 没有神奇的开关,让你的代码变得“更快”
没有让 Java 运行更快的“秘诀与技巧”
没有对你隐藏的秘密算法
如果有一本关于 Java 性能优化的书一开始就这样跟你兜底,你应该认真地读读,因为作者们看起来相当实在。他们继续,这不是一本代码性能技巧手册,相反,聚焦于好的性能工程所涉及的方方面面:
整个软件生命周期内的性能方法论
适用于性能的测试理论
度量、统计和工具
分析技能(包括系统和数据)
底层的技术与机制
那么书中有没有直接上手的代码呢?有是有,但是,作者说了,用之前你要三思:书的后半部分会引入一些启发式的代码级优化技术,不过这些技术都附带了开发人员在使用之前应该注意的警告和权衡。
持有这种理念的三位作者都是资深 Java 工程师(有两位 Java Champion 得主)。他们的基本认识是——性能优化是一门实验科学:JVM 性能调优是技术、方法论、可测的量和工具的综合。它的目的是以系统所有者或用户所期望的方式产生可以测量的输出。
更进一步,如果考虑到人的因素,性能优化是坚实的经验主义和软性的人类心理学的奇异组合。重点在于,一方面是可观测指标的绝对数字,另一方面是最终用户和干系人如何看待这些数字。而这本书就是要聚焦如何解决这一明显的悖论。
光是看到这里,我觉得你可以考虑入手这本书了,一本好书,作者持有的基本理念就会让你欢呼雀跃。
本杰明· J. 埃文斯 詹姆斯·高夫 克里斯·纽兰 | 著
曾波 | 译
| 图书特色
Java 性能优化领域经典作品
Amazon 4.5 星好评图书
不仅调优,还有编码相关内容,涉及 JIT 编译、语言性能等
本书从实验科学的角度探讨了Java 性能优化的方方面面,重点阐述了最新的实用 JVM 性能调优策略、工具和技巧。通过本书,我们不仅可以了解 Java 原理和技术如何充分利用现代硬件和操作系统、衡量 Java 性能的陷阱以及微基准测试的弊端有哪些,还能深入研究可能使团队烦恼的几种性能测试和常见反模式、JVM 垃圾收集、JIT 编译和 Java 语言性能技术等。
译者曾波特意在本书出版之时送给读者一段话:
2018 年 8 月,不经意间翻阅了一本名为 Optimizing Java: Practical Techniques for Improved Performance Tuning 的书,震惊于书中描述的系统性 Java 性能优化知识,于是迫切希望能将三位作者的理念与方法传达给国内的 Javaer。现在《Java性能优化实践:JVM调优策略、工具与技巧》中文版已经上架,希望这本书能够转化为你的性能调优利器,为项目带去真正的价值。对此,我深信不疑,毕竟,性能优化是一个常谈常新的话题,而这本书可以历经时间的考验。
作译者简介:
本杰明·J. 埃文斯(Benjamin J. Evans)
初创公司 jClarity 联合创始人和技术 Fellow,获得过 Java Champion 荣誉和 JavaOne Rockstar 奖,《Java程序员修炼之道》合著者。
詹姆斯·高夫(James Gough)
Java 开发者和技术图书作者,任职于摩根士丹利,专注构建面向客户的技术。
克里斯·纽兰(Chris Newland)
JITWatch 项目作者,Java Champion 荣誉得主,ADVFN 高级开发者和团队负责人,擅长使用 Java 来处理实时的股市数据。
译者 | 曾波
互联网架构师,拥有 13 年互联网从业经验,曾任职于微软、什么值得买、京东金融、鹏博士电信传媒集团,曾参与多家公司的技术团队从建立到成熟的过程,主持实施了重大技术决策和技术落地,在大规模复杂系统架构和技术管理方面拥有丰富的实践经验。
业内大佬倾力推荐
那具体说来,这本书写得怎么样呢?在本书还没有出版之前,国内外 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 杨晓峰,强调了本书三位作者丰富的行业经验和一线生产调优经验:
本书是不可多得的经典著作,由三位久负盛名、具备深刻行业经验的 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 技术,这本书值得常备手边。
| 说 明
题图及内文动物为捻角山羊(Capra falconeri),濒危动物(来自 Riverside Natural History)。动物出版社如本书所示的潘通色块的封面时代已终结,新出版的书封上已经不再有这般醒目的色彩。当然,中文引进版替换不会那么快,且读且珍惜。
抽奖赠书
截止时间:2021年2月7日 17:00
如何抽奖:扫描下方二维码,关注公众号,回复关键词 :20210202
下次你更希望我们送哪本书呢?
留言告诉我们!