《Java系统性能优化实战》基于作者在实际工作中遇到的与系统相关的问题及解决之道,通过改善代码来提高系统性能,解决因为代码导致的系统故障。本书介绍了如何在系统中运用高性能开源工具,以及代码优化和设计技巧来提升性能。另外,如何编写维护性强的代码也在本书的写作范畴内。本书还介绍了一些底层技术,比如Java字节码、ASM和JSR269,这些技术同样可以运用在项目中,以辅助提升性能和方便维护代码。
《Java系统性能优化实战》是一本Java开发规范和系统性能优化指南,从高性能、易维护、代码增强,以及在微服务系统中编写Java代码的角度来描述如何实现高性能Java系统。书中的大部分例子都是从作者所在传统企业应用,以及高并发系统中摘录而来的,极具参考意义。
《Java系统性能优化实战》适合中高级程序员和架构师,以及有志从事基础技术研发、开源工具研发的极客阅读。本书涉及的知识面比较广泛,也可以作为Java笔试和面试的参考书籍。
二十年开发经验沉淀
Java工程师进阶攻略
实战Java性能优化
每个公司都要求程序员写出性能良好、维护性强的代码,各种高端职位的任职要求也会把优化系统作为必选要求之一。当业务系统重构时,以及各种互联网大促前,也都期望系统的性能能变得更好。如何提高系统性能?简单的办法是升级系统硬件,或者购置更多的机器水平扩展系统,从而减少单机负荷以实现性能提高。这些办法简单粗暴,虽然效果立竿见影,但长期来看,投入大,产出小。随着系统中越来越多“坏味道”代码的堆积,这些办法的效果越来越不明显,提高单机系统的性能迫在眉睫,那么有没有优化Java系统自身的办法呢?市场上关于这方面的书籍或者聚焦于简单的开发规范,或者是纯理论的讲解。本书尝试把Java性能优化和实际业务系统结合起来一起讲解,期望为读者提供一种可操作的指导来优化Java系统性能。
本书的风格偏向实战,尽管部分知识能从其他书籍或互联网上获取,但本书还是亲自动手予以实践。比如,证明了“采用+拼接字符串的性能在某些使用方式下更快”;早已经被人熟知的“嵌套外小内大性能更好”是一个错误观点;final有助于内联也是过时的观点。
为了验证本书提供的工具的性能,书中会对这些工具做性能评测,或者将官方的性能测试代码运行并验证,分析一定的源码,理解其高性能的原因。对于一些早已熟悉的常识,不会肤浅介绍,而是精心设计了例子进行验证。比如,为了验证JIT对虚方法调用所做的优化和逆优化,设计了一个JMH测试例子。在第3章,验证指令重排序,刚开始在我的Mac上运行10万次都没有发生重排序,后来扩大到运行100万次,才会偶尔出现重排序的情况。
内容介绍
本书分为五部分,总共11章。
第一部分是第1章到第5章,第1章通过一个不超过10行的代码优化示例介绍如何对Java系统进行优化,如何使用JMH验证性能优化;第2章和第3章介绍JDK的核心类String、Number和并发包;第4章通过20多个优化技巧来说明Java性能优化的各种方法;第5章介绍了常用的高性能工具,如Caffeine、Jackson、HikariCP,并对其高性能的原因做了一定的源码解析。
第二部分是第6章和第7章,不同于代码规范,这部分强调编写易于阅读的代码,会从代码注释、代码分解、面向对象三方面进行讲解。容易阅读的代码是系统性能优化的前提。
第三部分是第8章,介绍JIT优化。JIT优化对Java系统运行有深刻的影响,本章系统介绍了JIT编译器、代码缓存、内联等知识。
第四部分是第9章,包含30多个具有“坏味道”的代码片段,读者可以尝试优化代码。
第五部分是第10章和第11章,第10章介绍Java字节码和ASM,用于运行时增强Java系统;第11章介绍JSR269规范,用于编译时增强Java系统。通过使用这些技术,可以有效提升系统的维护性和性能。
本书的每一章都可以扩展成一本书,但由于写作难度极大,本人水平有限,本书只保留了我认为最重要的内容。
致谢
首先感谢我的妻子苗珺对我写书的大力支持,2年前我写作第一本书《Spring Boot 2 精髓》的时候,压力还不是很大,而写作本书时正好面临了很大的工作和生活压力。没有她的支持,我是不可能全身心投入来完成这样难度极大的一本书的写作的。还有我的儿子,知道我正在做一件很重要的事情后就不再让我陪他聊天了。2年前他的身高还不到我肩膀,现在已经跟我一样高了,并且能用C语言完成一些奥赛信息竞赛题了。
其次感谢电子工业出版社的编辑给予我绝对的信任和支持,编辑对本书的出版做了非常多的指导,我们配合默契,感谢你们付出的辛勤汗水。
最后要感谢的是开源社区和个人公众号的一些朋友,他们对本书写作提供了很多帮助,分别是王伯勋、杨代全、朱洛毅、曾超、李句,他们做了部分书稿的校验工作,非常感谢他们,如果没有他们,我是不可能及时完成本书写作的。