【推荐语】
Java能优化越来越难。曾经,通过引入即时编译器,能实现8倍的能飞跃。而今,你可能会有疑问:Java能还有多大的优化空间?本书直面这一问题,证明对于工程师而言,仍有很多工作可做! 1.业内老牌工程师编著,资历深厚眼光毒辣 本书作者从事Oracle台软件的能优化工作。在加入Oracle之前,他是Sun公司的Java布道师,并在2001年加入Java能工程小组。作为业内深耕多年的老牌工程师,他将自己多年的JAVA编程经验整合在书中,透彻解释了JVM和Jav台特对应用程序能的影响。 2.拒绝“治标不治本” 本书帮助你针对Java 8和Java 11的能优化措施、工具和方法,从根本上理解应用程序能欠佳的原因,并熟练地运用恰当的标志提升能,随书附赠JVM调优标志速查表,含80余个常用调优标志 ,让你不再盲目测试数以百计的Java标志效果。 3.更新内容,更新体验 本书相对于前书而言,专注于更加成熟的Java 8和Java 11,主要更新内括Jav台新特(新型微基准测试工具、新的即时编译器、新的能工具等)、Java 11新特(紧凑字符串和字符串连接的增强等),也涉及到了GI垃圾回收器和Java飞行记录器,以及Java在容器化环境中运行方式的变化。 4.实用代码资源随书赠 本书附赠示例代码资源,更将新的术语与强调内容黑体划,不同代码以不同的字体排版展示,一目了然方便区分,阅读学单。 本书内容要点: * 理解Jav台特和编译器如何影响能 * 掌握Java垃圾回收机制 * 通过遵循4项原则来优化能测试结果 * 使用K等工具了解Java应用程序的能情况 * 通过编程实践来尽量降低垃圾回收器的不良影响 * 解决Java API的各种能难题 * 改善数据库应用程序的能
【目录】
前言
第1章 导论
1.1 概述
1.2台和约定
1.2.1 Jav台
1.2.2 硬台
1.3 的能
1.3.1 写出更好的算法
1.3.2 写更少的代码
1.3.3 过早优化
1.3.4 其他:数据库永远是瓶颈
1.3.5 常见优化
1.4 小结
第2章 能测试方法
2.1 测试真实的应用程序
2.1.1 微基准测试
2.1.2 宏基准测试
2.1.3 介基准测试
2.2 理解吞吐量、批处理时间和响应时间
2.2.1 测量批处理时间
2.2.2 测量吞吐量
2.2.3 测量响应时间
2.3 理解可变
2.4 早测试、常测试
2.5 基准测试示例
2.5.1 Java微基准测试工具
2.5.2 常用代码示例
2.6 小结
第3章 Java能工具箱
3.1 操作系统工具和分析
3.1.1 CPU使用率
3.1.2 CPU运行队列
3.1.3 磁盘使用率
3.1.4 网络使用率
3.2 Java 监控工具
3.2.1 基本的VM信息
3.2.2 线程信息
3.2.3 类信息
3.2.4 实时GC分析
3.2.5 堆转储后期处理
3.3 能分析工具
3.3.1 采样分析器
3.3.2 探查分析器
3.3.3 阻塞方法和线程时间线
3.3.4 原生分析器
3.4 JFR
3.4.1 Java Mission Control
3.4.2 JFR概览
3.4.3 开启JFR
3.4.4 选择JFR事件
3.5 小结
第4章 使用即时编译器
4.1 即时编译器:概览
4.2 分层编译
4.3 常用的编译器标志
4.3.1 优化代码缓存
4.3.2 检查编译过程
4.3.3 分层编译级别
4.3.4 逆优化
4.4 不错编译器标志
4.4.1 编译阈值
4.4.2 编译线程
4.4.3 内联
4.4.4 逃逸分析
4.4.5 CPU相关代码
4.5 分层编译的权衡
4.6 GraalVM
4.7 预编译
4.7.1 提前编译
4.7.2 GraalVM原生编译
4.8 小结
第5章 垃圾回收简介
5.1 垃圾回收概览
5.1.1 分代垃圾回收器
5.1.2 GC算法
5.1.3 选择GC算法
5.2 GC 优化基础
5.2.1 调整堆的大小
5.2.2 调整分代大小
5.2.3 调整元空间大小
5.2.4 控制并行
5.3 GC工具
5.3.1 在K 8中开启GC日志
5.3.2 在K 11中开启GC日志
5.4 小结
第6章 垃圾回收算法
6.1 理解Throughput回收器
6.2 理解G1垃圾回收器
6.3 理解CMS回收器
6.4 不错优化
6.4.1 晋升和Survivor空间
6.4.2 分配大对象
6.4.3 AggressiveHeap标志
6.4.4 掌控堆的大小
6.5 实验GC算法
6.5.1 并发压缩:ZGC和Shenandoah
6.5.2 无回收:Epsilon GC
6.6 小结
第7章 堆内存很好实践
7.1 堆分析
7.1.1 堆直方图
7.1.2 堆转储
7.1.3 内存溢出错误
7.2 减少内存使用
7.2.1 减小对象大小
7.2.2 使用延迟初始化
7.2.3 使用不可变对象和标准化对象
7.3 对象生命周期管理
7.3.1 对象重用
7.3.2 软引用、弱引用和其他引用
7.3.3 压缩的普通对象指针
7.4 小结
第8章 原生内存很好实践
8.1 内存占用
8.1.1 测量内存占用
8.1.2 小化内存占用
8.1.3 原生内存跟踪
8.1.4 共享库原生内存
8.2 针对操作系统的JVM优化
8.3 小结
第9章 线程和同步能
9.1 线程和硬件
9.2 线程池和ThreadPoolExecutor
9.2.1 设置线程数
9.2.2 设置小线程数
9.2.3 线程池任务大小
9.2.4 设置ThreadPoolExecutor的大小
9.3 ForkJoinPool.
9.3.1 工作窃取
9.3.2 自动并行化
9.4 线程同步
9.4.1 同步的代价
9.4.2 避免同步
9.4.3 伪共享
9.5 JVM线程优化
9.5.1 优化线程栈大小
9.5.2 偏向锁
9.5.3 线程优先级
9.6 监控线程和锁
9.6.1 查看线程
9.6.2 查看阻塞线程
9.7 小结
第10章 Java服务器
10.1 Java NIO概览
10.2 服务器容器
10.2.1 优化服务器线程池
10.2.2 异步Rest服务器
10.3 异步出站调用
10.4 JSON处理
10.4.1 解析和编组概览
10.4.2 JSON对象
10.4.3 JSON解析
10.5 小结
第11章 数据库能很好实践
11.1 示例数据库
11.2 BC
11.2.1 BC驱动
11.2.2 BC连接池
11.2.3 预处理语句和语句池
11.2.4 事务
11.2.5 结果集处理
11.3 JPA
11.3.1 优化JPA写
11.3.2 优化JPA读
11.3.3 JPA缓存
11.4 Spring Data
11.5 小结
第12章 Java SE API技巧
12.1 字符串
12.1.1 压缩字符串
12.1.2 重复字符串和字符串保留
12.1.3 字符串连接
12.2 缓冲I/O
12.3 类加载
12.4 数
12.5 Java原
返回顶部