在当前的互联网发模式下,系统访问量日增、代码臃肿,各种性能问题纷涌而至。性能优化作为一个常谈常新的话题,受到越来越多发者的关注。而Java是一门使用广泛的语言,社区生态中积攒了大量宝贵的性能优化经验。 1.作为一本性能调优方面的实用指南,本书从实验科学的角度将JVM调优的技术原理与方法论相结合,并在此基础上提供了可选择的工具。 2.通过对各方面的深研究,本书能让使用复杂技术栈的中高级Java技术专家以量化和可验证的方法优化Java应用程序性能。
售 价:¥
纸质售价:¥54.50购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
版权声明
O'Reilly Media, Inc. 介绍
业界评论
献词
中文版推荐序一
中文版推荐序二
前言
排版约定
使用代码示例
O'Reilly在线学习平台(O'Reilly Online Learning)
联系我们
致谢
更多信息
第 1 章 明确优化与性能
1.1 关于Java性能的误解
1.2 Java性能概览
1.3 作为实验科学的性能
1.4 性能分类方法
1.4.1 吞吐量
1.4.2 延迟
1.4.3 容量
1.4.4 利用率
1.4.5 效率
1.4.6 可扩展性
1.4.7 降级
1.4.8 各种性能观测之间的关联
1.5 阅读性能图
1.6 小结
第 2 章 JVM 概览
2.1 解释和类加载
2.2 执行字节码
2.3 HotSpot简介
即时编译简介
2.4 JVM内存管理
2.5 线程和Java内存模型
2.6 认识不同的JVM
关于许可证的说明
2.7 JVM的监控和工具
VisualVM
2.8 小结
第 3 章 硬件与操作系统
3.1 现代硬件简介
3.2 内存
内存高速缓存
3.3 现代处理器特性
3.3.1 翻译后备缓冲器
3.3.2 分支预测和推测执行
3.3.3 硬件存储器模型
3.4 操作系统
3.4.1 调度器
3.4.2 时间问题
3.4.3 上下文切换
3.5 一个简单的系统模型
3.6 基本探测策略
3.6.1 利用CPU
3.6.2 垃圾收集
3.6.3 I/O
3.6.4 机械共鸣
3.7 虚拟化
3.8 JVM和操作系统
3.9 小结
第 4 章 性能测试模式与反模式
4.1 性能测试的类型
4.1.1 延迟测试
4.1.2 吞吐量测试
4.1.3 负载测试
4.1.4 压力测试
4.1.5 耐久性测试
4.1.6 容量规划测试
4.1.7 退化测试
4.2 最佳实践入门
4.2.1 自上而下的性能测试
4.2.2 创建一个测试环境
4.2.3 确定性能要求
4.2.4 Java特有的问题
4.2.5 将性能测试当作软件开发生命周期的一部分
4.3 性能反模式
4.3.1 厌倦
4.3.2 填充简历
4.3.3 同侪压力
4.3.4 缺乏理解
4.3.5 被错误理解的问题/不存在的问题
4.4 性能反模式目录
4.4.1 被热门技术分心
4.4.2 被简单分心
4.4.3 性能调优天才
4.4.4 按照坊间传说调优
4.4.5 把责任归咎给驴
4.4.6 忽略大局
4.4.7 用户验收测试环境就是我的计算机
4.4.8 类似生产环境的数据很难表示
4.5 认知偏差与性能测试
4.5.1 还原论思维
4.5.2 确认偏差
4.5.3 战争的迷雾(行动偏差)
4.5.4 风险偏差
4.5.5 埃尔斯伯格悖论
4.6 小结
第 5 章 微基准测试与统计
5.1 Java性能测量
5.2 JMH
5.2.1 不是万不得已,不要做微基准测试(一个真实的故事)
5.2.2 关于何时使用微基准测试的启发
5.2.3 JMH框架
5.2.4 执行基准测试
5.3 JVM性能统计
5.3.1 误差类型
5.3.2 非正态统计
5.4 统计的解释
5.5 小结
第 6 章 理解垃圾收集
6.1 标记和清除
垃圾收集术语
6.2 HotSpot运行时
6.2.1 对象的运行时表示
6.2.2 GC根和Arena
6.3 分配与生命周期
弱分代假说
6.4 HotSpot中的垃圾收集
6.4.1 线程本地分配
6.4.2 半空间收集
6.5 并行收集器
6.5.1 新生代并行收集
6.5.2 老年代并行收集
6.5.3 并行收集器的局限性
6.6 分配的作用
6.7 小结
第 7 章 垃圾收集高级话题
7.1 权衡与可插拔的收集器
7.2 并发垃圾收集理论
7.2.1 JVM安全点
7.2.2 三色标记
7.3 CMS
7.3.1 CMS是如何工作的
7.3.2 用于CMS的基本JVM标志
7.4 G1
7.4.1 G1堆布局和区域
7.4.2 G1算法设计
7.4.3 G1的各阶段
7.4.4 用于G1的基本JVM标志
7.5 Shenandoah
7.5.1 并发压缩
7.5.2 获取Shenandoah
7.6 C4(Azul Zing)
LVB
7.7 IBM J9中的均衡收集器
7.7.1 J9对象头
7.7.2 Balanced收集器的大数组
7.7.3 NUMA和Balanced收集器
7.8 遗留的HotSpot收集器
7.8.1 Serial和SerialOld
7.8.2 增量式CMS
7.8.3 已被废弃和删除的垃圾收集组合
7.8.4 Epsilon
7.9 小结
第 8 章 垃圾收集日志、监控、调优及工具
8.1 认识垃圾收集日志
8.1.1 开启垃圾收集日志记录
8.1.2 垃圾收集日志与JMX的对比
8.1.3 JMX的缺点
8.1.4 垃圾收集日志数据带来的好处
8.2 日志解析工具
8.2.1 Censum
8.2.2 GCViewer
8.2.3 对于同一数据的不同可视化效果
8.3 基本垃圾收集调优
8.3.1 理解分配行为
8.3.2 理解暂停时间
8.3.3 收集器线程和GC根
8.4 调优Parallel GC
8.5 调优CMS
由碎片化导致的并发模式失败
8.6 调优G1
8.7 jHiccup
8.8 小结
第 9 章 JVM 上的代码执行
9.1 字节码解释概览
9.1.1 JVM字节码
9.1.2 简单解释器
9.1.3 HotSpot特定细节
9.2 AOT编译和JIT编译
9.2.1 AOT编译
9.2.2 JIT编译
9.2.3 比较AOT和JIT
9.3 HotSpot JIT基础
9.3.1 Klass字、虚函数表和指针变换
9.3.2 JIT编译日志
9.3.3 HotSpot中的编译器
9.3.4 HotSpot中的分层编译
9.4 代码缓存
碎片
9.5 简单JIT调优
9.6 小结
第 10 章 理解即时编译
10.1 认识JITWatch
10.1.1 基本的JITWatch视图
10.1.2 调试JVM和hsdi
10.2 介绍JIT编译
10.3 内联
10.3.1 内联的限制
10.3.2 调优内联子系统
10.4 循环展开
循环展开小结
10.5 逃逸分析
10.5.1 消除堆分配
10.5.2 锁与逃逸分析
10.5.3 逃逸分析的限制
10.6 单态分派
10.7 内部函数
10.8 栈上替换
10.9 再谈安全点
10.10 核心库方法
10.10.1 内联方法的大小上限
10.10.2 编译方法的大小上限
10.11 小结
第 11 章 Java语言性能技术
11.1 优化集合
11.2 针对列表的优化考虑
11.2.1 ArrayList
11.2.2 LinkedList
11.2.3 ArrayList与LinkedList的对比
11.3 针对映射的优化考虑
11.3.1 HashMap
11.3.2 TreeMap
11.3.3 缺少MultiMap
11.4 针对集的优化考虑
11.5 领域对象
11.6 避免终结化
11.6.1 血泪史:忘记清理
11.6.2 为什么不使用终结化来解决这个问题
11.6.3 try-with-resources
11.7 方法句柄
11.8 小结
第 12 章 并发性能技术
12.1 并行介绍
基本的Java并发
12.2 理解JMM
12.3 构建并发库
12.3.1 Unsafe
12.3.2 原子与CAS
12.3.3 锁和自旋锁
12.4 并发库总结
12.4.1 java.util.concurrent中的Lock
12.4.2 读/写锁
12.4.3 信号量
12.4.4 并发集合
12.4.5 锁存器和屏障
12.5 执行器和任务抽象
12.5.1 认识异步执行
12.5.2 选择一个ExecutorService
12.5.3 Fork/Join
12.6 现代Java并发
12.6.1 流和并行流
12.6.2 无锁技术
12.6.3 基于Actor的技术
12.7 小结
第 13 章 剖析
13.1 认识剖析
13.2 采样与安全点偏差
13.3 面向开发人员的执行剖析工具
13.3.1 VisualVM剖析器
13.3.2 JProfiler
13.3.3 YourKit
13.3.4 Java Flight Recorder和Java Mission Control
13.3.5 运维工具
13.4 现代剖析器
13.5 分配剖析器
13.6 堆转储分析
hprof
13.7 小结
第 14 章 高性能日志和消息系统
14.1 日志
对日志记录器做基准测试
14.2 设计一个影响较低的日志记录器
14.3 使用Real Logic库实现低延迟
14.3.1 Agrona
14.3.2 Simple Binary Encoding
14.3.3 Aeron
14.3.4 Aeron的设计
14.4 小结
第 15 章 Java 9 以及 Java 的未来方向
15.1 Java 9中小的性能增强
15.1.1 分段式代码缓存
15.1.2 紧凑的字符串
15.1.3 新的字符串连接
15.1.4 C2编译器的改进
15.1.5 新版G1收集器
15.2 Java 10和未来版本
15.2.1 新的发布流程
15.2.2 Java 10
15.3 Java 9及更高版本中的Unsafe
Java 9中的VarHandles
15.4 Valhalla项目和值类型
15.5 Graal和Truffle
15.6 字节码的未来方向
15.7 并发的未来方向
15.8 总结
作者介绍
封面介绍
看完了
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜