# Java系统性能优化 # 内容介绍 《Java系统性能优化》参考了工作中的遇到的系统相关的问题以及解决之道,通过改善代码提高性能,解决因为代码导致的系统故障。在系统中运用高性能开源工具,运用代码和设计技巧以提升性能。如何编写维护性强的代码也在本书的写作范围内。本书介绍一些底层的技术,字节码和ASM,JSR269,这些技术同样可用在项目中以辅助性能提升和方便代码维护。 本书是一本Java开发规范指南,Java系统性能优化指南,从高性能,易维护,代码增强,以及分微服务系统Java代码如何编写的角度来描述如何实现高性能java系统。本书大部分例子都是作者所在传统企业应用,以及高并发系统中摘录而来,极具参考意义。本书适合中高级程序和架构师,以及有志从事基础技术研发,开源工具研发的极客。本书涉及知识广泛,也是Java笔试面试的参考书籍。 > 本书在JD有售,希望通过电子版提高个人收入,且有许多新的想法和实践只能在电子版本完善和优化 # 序言 每个公司都要求程序员写出性能良好,维护性强的代码,各种高端职位的任职要求也会把优化系统作为必选要求之一;当业务系统重构时,还有各种互联网系统大促前,也都期望系统的性能变得更好。如何提高系统性能?简单的办法是升级系统硬件,或者购置更多的机器水平扩展系统从而减少单机负荷实现性能提高,这些办法简单粗暴,虽然效果立杆见影,但长期看来投入大,产出小,随着系统越来越多坏味道代码的堆积,这些办法效果越来越不明显。提高单机系统的性能迫在眉睫, 那么有没有优化Java系统自身的办法呢?市场上关于这方面的书籍还是较少,或者聚焦于简单的开发规范,或者是纯理论的讲解。本书将尝试把Java性能优化指南和实际业务系统结合起来一起讲解,期望为程序员和公司提供一种可操作的指导来优化Java系统性能。写作本书,会冒一定风险,因为它并非一本热门技术书籍,或者互联网相关技术书籍,它是一本Java基础进阶的书籍。非常感谢出版社愿意出版这本书。 本书风格偏向实战,尽管部分知识能从其他书籍或者互联网获取,本书重点还是梳理和验证这些知识点,比如颠覆性的证明了“采用+拼接字符串“可能更快,早已经被人熟知的“嵌套外小内大性能更好“是个错误观点,final有助于内联也是过时的观点。为了验证本书提供的工具性能优秀,会拿出这些工具做性能评测,或者把官方的性能测试代码拿出来运行并验证,并分析一定的源码,理解其高性能的原因。 对一些早已熟悉的常识,不会肤浅介绍,而是精心设计例子用于验证,比如为了验证JIT对虚方法调用所做的优化和逆优化,设计了一个JMH测试例子供验证。在并发编程一章,验证指令重排序对并发编程的影响,刚开始在我的Mac本上运行10万次都没有发生重排序,后来扩大到运行100万次,才会偶尔出现。 **内容介绍**:分为5部分,总共11章,大约300+页。 第一部分是1到5章,第1章通过一个10行代码介绍如何对Java系统优化,如何使用JMH验证性能优化。第2章和第3章介绍JDK的核心类String,Number还有并发包,第4章包含了20+优化技巧说明Java性能优化的各种方法,第5章介绍了常用的高性能工具如Caffine,Jackson,HikariCP。并对其高性能原因做了一定源码解析。 第二部分是6-7章,重点阐述易于阅读代码编写,不同于代码规范,本篇更强调编写易于阅读的代码,会从代码注释,代码分解,面向对象三方面来说。容易阅读的代码是系统性能优化的前提 第三部分是虚拟机相关,第8章介绍JIT优化。JIT优化对Java系统运行有深刻的影响,本章系统介绍了JIT编译器,代码缓存,内联等知识 第四部分是9章是,包含了30+个具有坏味道的代码片段,读者可以尝试优化代码。 第五部分是10-11章,第10章介绍字节码和ASM,用于运行时增强Java系统,11章介绍JSR269规范,用于编译时增强Java系统。通过使用这些技术,可以有效提升系统维护性和性能 由于本书写作难度极大,而我水平有限,并非专门的研发人员,是一个多年奋斗在业务线开发的程序员,因此难免有纰漏,敬请读者指正。本书在说明如何提高Java系统的可维护性方面,尽管引用了一些业界大牛的观点,但难免这些都是一些主观建议,与具体项目的最佳实践难免冲突,也欢迎与我一起讨论这些最佳实践。 本书的每一章都可以扩展成一本小册子来写,但由于篇幅有限和水平有限,只留下来了我认为最为实用的的部分,这是本书写作的遗憾。 # 源码和个人公众号 https://gitee.com/xiandafu/java-performance ​ # 作者介绍 ## 作者 李家智:资深架构师,曾在电信行业,金融行业和互联网电商行业任职架构师。从事软件开发近20年,致力于Java和Java EE系统的架构和实现,对一切技术充满好奇,以知行合一要求自己。是国内知名高性能Beetl和BeetlSQL的第一作者,上一本书是畅销书《Spring Boot 2精髓》主要作者,爱好足球和旅游。 ## 作者 张世敏:目前就职于东方金科,7年Java软件开发经验,喜欢参与开源项目,热衷于探索新的技术。爱好健身与看书,曾是李家智在东方金科技术创新部的助手。 # 推荐 ## 推荐一 看了李兄的第四章《代码性能优化》,里面提到了很多代码优化技巧,非常实用,很多技巧也是t-io经常在用的,譬如预编译、预编码、批处理、压缩等。 高性能的程序,都没有容易二字,都是一个细节一个细节抠出来的,希望李兄的这本书可以帮到更多java工程师和架构师,也祝本书的读者以后Bug少少、性能高高 --谭耀武(知名网络框架t-io创始人,目前任职牛吧云播CTO) ## 推荐二 有幸阅读此书,这是一本大道至简的Java性能优化指南,使得我们的开源项目的代码质量,以及性能有了飞跃的帮助,更能够指导每个java工程师写出优雅,易阅读,高质量易于扩展的代码。 — 肖宇(开源组织[dromara.org](http://dromara.org)创始人,分布式事务框架hmily,API网关soul等开源框架作者) ## 推荐三 读了家智的第8章《JIT优化》、第10章《ASM运行时增强》、第11章《JSR269编译时增强》,颇感惊艳。很少有文章或书籍能够将JIT、ASM、JSR269用近乎白话的方式进行较为系统的阐述。家智使用很少的文字把这三个比较深的知识说清楚、带入门,实属难得。 ​ 应用性能管理(APM)在高性能的应用系统中相当重要,字节码和运行增强技术点也非常深,本书不仅可以作为Java应用程序性能优化的指导,也是很好的Java APM领域入门工具书。 — 高驰涛 (SeasLog及多项开源项目作者、SeasX开源团队创始人,APM专家,目前任云智慧Technical VP) ## 推荐四 此书很好的介绍了Java在代码层面的一些优化技巧,同时也透过这些技巧很好的解释了jvm在解析代码时的工作方式。其实这种小技巧在熟悉原理后完全可以封装成现成的工具避免重复劳动,Hutool工具也是优化代码后封装的结果,而这本书几乎涵盖了这些技巧。不只是性能优化,在代码规范上本书也有很好的诠释,好的规范可以规避大部分的坑,因此如果你想少踩坑,本书也不容错过。 — 路小磊 知名开源Java工具包hutool 作者 ## 推荐五 指数级增长面临的技术挑战是系统性能。性能优化是时间和空间的艺术,而运行时优化又是性能优化技术体系的难点所在,一直是软件工程师们的苦处。家智兄的《Java系统性能优化》一书有庖丁解牛的味道,从run-time的视角指出了Java代码系统性优化的一些方向和实战技法,可以作为Java程序员追求性能极致的参考指南甚至案头手册。能先睹为快,真一幸事! ——曹洪伟 百度DuerOS首席布道师 ## 推荐六 本书对JAVA日常工作中的性能优化方法做了详尽的阐述,可以很好的指导我们让自己的代码更健壮的同时更高效。书中还为我们提供了高性能工具的使用和建议,非常值得一读。 -- 京东资深架构师 《架构修炼之道》作者 王新栋 ## 推荐七 随着需求功能不断的迭代,系统瓶颈越发明显,本书对工作中遇到的系统性能优化做了详尽的讲解,并提供了一套切实可行的实践指南。如何打破系统的坏味道,如何提高系统的性能,如何设计出高性能的技术架构,阅读本书对读者必有裨益。 -- 《高可用可伸缩微服务架构:基于Dubbo、Spring Cloud和Service Mesh》联合作者 梁桂钊