Java系统性能优化实战
  • 推荐1
  • 收藏4
  • 浏览2.4K

Java系统性能优化实战

李家智 张世敏 (作者) 

  • 书  号:978-7-121-37566-8
  • 出版日期:2019-11-06
  • 页  数:376
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥89.00
《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语言完成一些奥赛信息竞赛题了。
其次感谢电子工业出版社的编辑给予我绝对的信任和支持,编辑对本书的出版做了非常多的指导,我们配合默契,感谢你们付出的辛勤汗水。
最后要感谢的是开源社区和个人公众号的一些朋友,他们对本书写作提供了很多帮助,分别是王伯勋、杨代全、朱洛毅、曾超、李句,他们做了部分书稿的校验工作,非常感谢他们,如果没有他们,我是不可能及时完成本书写作的。

目录

第1章 Java代码优化
1.1 可优化的代码
1.2 性能监控
1.3 JMH
1.3.1 使用JMH
1.3.2 JMH常用设置
1.3.3 注意事项
1.3.4 单元测试
第2章 字符串和数字操作
2.1 构造字符串
2.2 字符串拼接
2.3 字符串格式化
2.4 字符串查找
2.5 替换
2.6 intern方法
2.7 StringUtils类
2.8 前缀树过滤
2.9 数字装箱
2.10 BigDecimal
第3章 并发编程和异步编程
3.1 不安全的代码
3.2 Java并发编程
3.2.1 volatile
3.2.2 synchronized
3.2.3 Lock
3.2.4 Condition
3.2.5 读写锁
3.2.6 Semaphore
3.2.7 栅栏
3.3 Java并发工具
3.3.1 原子变量
3.3.2 Queue
3.3.3 Future
3.3.4 ThreadLocal
3.4 Java线程池
3.5 异步编程
3.5.1 创建异步任务
3.5.2 完成后回调
3.5.3 串行执行
3.5.4 并行执行
3.5.5 接收任务处理结果
第4章 代码性能优化
4.1 int转String
4.2 使用Native方法
4.3 日期格式化
4.4 switch优化
4.5 优先使用局部变量
4.6 预处理
4.7 预分配
4.8 预编译
4.9 预先编码
4.10 谨慎使用Exception
4.11 批处理
4.12 展开循环
4.13 静态方法调用
4.14 高速Map存取
4.15 位运算
4.16 反射
4.17 压缩
4.18 可变数组
4.19 System.nanoTime()
4.20 ThreadLocalRandom
4.21 错误优化策略
4.21.1 final无法帮助内联
4.21.2 subString内存泄漏
4.21.3 循环优化
4.21.4 循环中捕捉异常
第5章 高性能工具
5.1 高速缓存Caffeine
5.1.1 安装Caffeine
5.1.2 Caffeine的基本使用方法
5.1.3 淘汰策略
5.1.4 statistics功能
5.1.5 Caffeine高命中率
5.1.6 卓越的性能
5.2 映射工具Selma
5.3 JSON工具Jackson
5.3.1 Jackson的三种使用方式
5.3.2 Jackson树遍历
5.3.3 对象绑定
5.3.4 流式操作
5.3.5 自定义JsonSerializer
5.3.6 集合的反序列化
5.3.7 性能提升和优化
5.4 HikariCP
5.4.1 安装HikariCP
5.4.2 HikariCP性能测试
5.4.3 性能优化说明
5.5 文本处理工具Beetl
5.5.1 安装和配置
5.5.2 脚本引擎
5.5.3 Beetl的特点
5.5.4 性能优化
5.6 MessagePack
5.7 ReflectASM
第6章 Java注释规范
6.1 Javadoc
6.2 Tag
6.2.1 {@link}
6.2.2 @deprecated
6.2.3 {@literal}
6.2.4 {@code}
6.2.5 {@value}
6.2.6 @author
6.2.7 @param和@return
6.2.8 @throws
6.2.9 @see
6.2.10 自动复制
6.3 Package-Info
6.4 HTML的生成
6.5 Markdown-doclet
第7章 可读性代码
7.1 精简注释
7.2 变量
7.2.1 变量命名
7.2.2 变量的位置
7.2.3 中间变量
7.3 方法
7.3.1 方法签名
7.3.2 短方法
7.3.3 单一职责
7.4 分支
7.4.1 if else
7.4.2 switch case
7.5 发现对象
7.5.1 不要使用String
7.5.2 不要用数组、Map
7.6 checked异常(可控异常)
7.7 其他事项
7.7.1 避免自动格式化
7.7.2 关于Null
第8章 JIT优化
8.1 解释和编译
8.2 C1和C2
8.3 代码缓存
8.4 JITWatch
8.5 内联
8.6 虚方法调用
第9章 代码审查
9.1 ConcurrentHashMap陷阱
9.2 字符串搜索
9.3 I/O输出
9.4 字符串拼接
9.5 方法的入参和出参
9.6 RPC调用定义的返回值
9.7 Integer的使用
9.8 排序
9.9 判断特殊的ID
9.10 优化if结构
9.11 文件复制
9.12 switch优化
9.13 Encoder
9.14 一个JMH例子
9.15 注释
9.16 完善注释
9.17 方法抽取
9.18 遍历Map
9.19 日期格式化
9.20 日志框架设计的问题
9.21 持久化到数据库
9.22 某个RPC框架
9.23 循环调用
9.24 lock的使用
9.25 字符集
9.26 处理枚举值
9.27 任务执行
9.28 开关判断
9.29 JDBC操作
9.30 Controller代码
9.31 停止任务
第10章 ASM运行时增强
10.1 Java字节码
10.1.1 基础知识
10.1.2 .class文件的格式
10.2 Java方法的执行
10.2.1 方法在内存中的表示
10.2.2 方法在.class文件中的表示
10.2.3 指令的分类
10.2.4 操作数栈的变化分析
10.3 Bytecode Outline插件
10.4 ASM入门
10.4.1 生成类名和构造函数
10.4.2 生成main方法
10.4.3 调用生成的代码
10.5 ASM增强代码
10.5.1 使用反射实现
10.5.2 使用ASM生成辅助类
10.5.3 switch语句的分类
10.5.4 获取Bean中的property
10.5.5 switch语句的实现
10.5.6 性能对比
第11章 JSR269编译时增强
11.1 Java编译的过程
11.2 注解处理器入门
11.3 相关概念介绍
11.3.1 AbstractProcessor
11.3.2 Element与TypeMirror
11.4 注解处理器进阶
11.4.1 JsonWriter注解
11.4.2 处理器与生成辅助类
11.4.3 使用生成的Mapper类
11.4.4 注解处理器的使用
11.5 调试注解处理器
11.5.1 在Eclipse中调试注解处理器
11.5.2 在IDEA中调试注解处理
附录A 使用OQL分析虚拟机内存

读者评论

图书类别

推荐用户

相关图书

Knative最佳实践

Jacques Chester (作者) 赵吉壮 杨云锋 (译者)

本书主要围绕 Knative 进行展开,主要作者是 Knative 专家(社区作者)Jacques Chester ,先后从 Knative 构建、扩缩容、事件...

¥118.00

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

云原生数据库:原理与实践

周恩昌 (作者)

本书详细剖析了作为核心基础软件系统的数据库在云计算时代的技术演进历程,从架构设计、实现机制和系统优化等多个角度阐述传统数据库技术是如何一步步发展到云原生形态的。...

¥99.00

SequoiaDB分布式数据库权威指南

黄达玮 (作者)

本书旨在介绍 SequoiaDB 巨杉数据库的基本概念、应用场景、企业级应用案例、数据库实例创建与管理方式、数据库集群管理的基本策略、以及性能调优和问题诊断。...

¥99.00

最强iOS和macOS安全宝典

Jonathan Levin (作者) 郑旻 (译者)

《最强iOS和macOS安全宝典》以苹果操作系统的安全为主题,主要面向苹果高级用户、系统管理员、安全研究人员和黑客。<br>本书主要分三个部分:第一部分重点介绍...

¥179.00

极限黑客攻防:CTF赛题揭秘

王新辉 天融信阿尔法实验室 张黎元 郭勇生 (作者)

CTF在网络安全领域特指网络安全技术人员之间进行技术竞技的一种比赛。CTF代替了以往黑客通过互相发起真实攻击进行技术比拼的方式,题目来自日常工作环境,并将其中的...

¥99.00