
Optimizing Java: Practical Techniques for Improved Performance Tuning
[英]本杰明• J. 埃文斯(Benjamin J. Evans) / [英]詹姆斯•高夫(James Gough) … 译者: 曾波
简介
本书从实验科学的角度探讨了Java性能优化的方方面面,重点阐述了最新的实用JVM性能调优策略,工具和技巧.通过本书,我们不仅可以了解Java原理和技术如何充分利用现代硬件和操作系统,衡量Java性能的陷阱以及微基准测试的弊端有哪些,还能深入研究可能使团队烦恼的几种性能测试和常见反模式,JVM垃圾收集,JIT编译和Java语言性能技术等.
contents
前言 xix
第1章 明确优化与性能 1
1.1 关于Java性能的误解 1
1.2 Java性能概览 2
1.3 作为实验科学的性能 3
1.4 性能分类方法 4
1.4.1 吞吐量 4
1.4.2 延迟 5
1.4.3 容量 5
1.4.4 利用率 5
1.4.5 效率 5
1.4.6 可扩展性 5
1.4.7 降级 6
1.4.8 各种性能观测之间的关联 6
1.5 阅读性能图 7
1.6 小结 11
第2章 JVM概览 12
2.1 解释和类加载 12
2.2 执行字节码 13
2.3 HotSpot简介 17
2.4 JVM内存管理 19
2.5 线程和Java内存模型 20
2.6 认识不同的JVM 20
2.7 JVM的监控和工具 22
2.8 小结 25
第3章 硬件与操作系统 26
3.1 现代硬件简介 27
3.2 内存 27
3.3 现代处理器特性 33
3.3.1 翻译后备缓冲器 33
3.3.2 分支预测和推测执行 33
3.3.3 硬件存储器模型 33
3.4 操作系统 34
3.4.1 调度器 35
3.4.2 时间问题 36
3.4.3 上下文切换 37
3.5 一个简单的系统模型 38
3.6 基本探测策略 39
3.6.1 利用CPU 40
3.6.2 垃圾收集 41
3.6.3 I/O 41
3.6.4 机械共鸣 43
3.7 虚拟化 44
3.8 JVM 和操作系统 45
3.9 小结 46
第4章 性能测试模式与反模式 47
4.1 性能测试的类型 47
4.1.1 延迟测试 48
4.1.2 吞吐量测试 48
4.1.3 负载测试 49
4.1.4 压力测试 49
4.1.5 耐久性测试 49
4.1.6 容量规划测试 49
4.1.7 退化测试 50
4.2 最佳实践入门 50
4.2.1 自上而下的性能测试 50
4.2.2 创建一个测试环境 51
4.2.3 确定性能要求 52
4.2.4 Java 特有的问题 52
4.2.5 将性能测试当作软件开发生命周期的一部分 52
4.3 性能反模式 53
4.3.1 厌倦 53
4.3.2 填充简历 54
4.3.3 同侪压力 54
4.3.4 缺乏理解 54
4.3.5 被错误理解的问题/ 不存在的问题 54
4.4 性能反模式目录 55
4.4.1 被热门技术分心 55
4.4.2 被简单分心 55
4.4.3 性能调优天才 56
4.4.4 按照坊间传说调优 57
4.4.5 把责任归咎给驴 58
4.4.6 忽略大局 59
4.4.7 用户验收测试环境就是我的计算机 60
4.4.8 类似生产环境的数据很难表示 61
4.5 认知偏差与性能测试 62
4.5.1 还原论思维 62
4.5.2 确认偏差 63
4.5.3 战争的迷雾(行动偏差) 63
4.5.4 风险偏差 64
4.5.5 埃尔斯伯格悖论 64
4.6 小结 65
第5章 微基准测试与统计 66
5.1 Java 性能测量 66
5.2 JMH 70
5.2.1 不是万不得已,不要做基准测试(一个真实的故事) 70
5.2.2 关于何时使用微基准测试的启发 70
5.2.3 JMH 框架 72
5.2.4 执行基准测试 73
5.3 JVM 性能统计 77
5.3 1 误差类型 78
5.3 2 非正态统计 82
5.4 统计的解释 85
5.5 小结 88
第6章 理解垃圾收集 89
6.1 标记和清除 90
6.2 HotSpot 运行时 92
6.2.1 对象的运行时表示 92
6.2.2 GC 根和Arena 95
6.3 分配与生命周期 96
6.4 HotSpot 中的垃圾收集 98
6.4.1 线程本地分配 98
6.4.2 半空间收集 99
6.5 并行收集器 100
6.5.1 新生代并行收集 101
6.5.2 老年代并行收集 102
6.5.3 并行收集器的局限性 103
6.6 分配的作用 104
6.7 小结 108
第7章 垃圾收集高级话题 109
7.1 权衡与可插拔的收集器 109
7.2 并发垃圾收集理论 111
7.2.1 JVM 安全点 111
7.2.2 三色标记 112
7.3 CMS 114
7.3.1 CMS 是如何工作的 115
7.3.2 用于CMS 的基本JVM 标志 117
7.4 G1 118
7.4.1 G1 堆布局和区域 118
7.4.2 G1 算法设计 119
7.4.3 G1 的各阶段 120
7.4.4 用于G1 的基本JVM 标志 121
7.5 Shenandoah 121
7.5.1 并发压缩 123
7.5.2 获取Shenandoah 123
7.6 C4(Azul Zing) 124
7.7 IBM J9 中的均衡收集器 127
7.7.1 J9 对象头 128
7.7.2 Balanced 收集器的大数组 129
7.7.3 NUMA 和Balanced 收集器 129
7.8 遗留的HotSpot 收集器 130
7.8.1 Serial 和SerialOld 130
7.8.2 增量式CMS 131
7.8.3 已被废弃和删除的垃圾收集组合 131
7.8.4 Epsilon 131
7.9 小结 132
第8章 垃圾收集日志、监控、调优及工具 133
8.1 认识垃圾收集日志 133
8.1.1 开启垃圾收集日志记录 133
8.1.2 垃圾收集日志与JMX 的对比 134
8.1.3 JMX 的缺点 135
8.1.4 垃圾收集日志数据带来的好处 136
8.2 日志解析工具 136
8.2.1 Censum 137