资源详情

Java性能权威指南(第2版)(图灵出品)

Java性能权威指南(第2版)(图灵出品)-电子书下载


作者: Scott Oaks
出版社: 人民邮电出版社
译者: 党文亮
出版年: 2022-4
页数: 328
定价: 129.80
装帧: 平装
丛书: 图灵程序设计丛书·Java系列
ISBN: 9787115587367

下载次数:1


本站推荐

书籍资料

  • 内容简介
  • 作者介绍
  • 书籍目录

本书从JVM和Java API两个方面,深入地介绍了Java 8和Java 11等新的Java长期支持版本中影响性能的因素。本书先从Java应用程序的通用方法、基准测试的缺陷、性能监控工具等方面,分析了如何通过JVM的配置方式影响程序的性能;接着从即时编译、垃圾回收、堆内存与原生内存最佳实践、线程与同步的性能等方面,分析了常见的优化方向及其特性。第2版专注于更加成熟的Java 8和Java 11,主要的更新内容涉及G1垃圾回收器和Java飞行记录器,以及Java在容器化环境下的性能变化。

斯科特.奥克斯(Scott Oaks)
Oracle公司架构师,从事Oracle云平台软件的性能优化工作。在加入Oracle之前,他是Sun公司的Java布道师,并在2001年加入Java性能工程小组,专注于Java的性能优化工作。除了本书,他还著有多部涉及Java线程、Java安全等方面的著作。
【译者简介】
党文亮
沉浸Java相关领域多年,目前在华为云专注于性能诊断平台和OS管理系统的研发,有大量从0到1的项目实践经验,在逆向、性能、算法等方面都有一定的积累。

前言xiii
第1章 导论1
1.1 概述2
1.2 平台和约定2
1.2.1 Java平台2
1.2.2 硬件平台4
1.3 全面的性能6
1.3.1 写出更好的算法6
1.3.2 写更少的代码7
1.3.3 过早优化8
1.3.4 其他:数据库永远是瓶颈9
1.3.5 常见优化9
1.4 小结10
第2章 性能测试方法11
2.1 测试真实的应用程序11
2.1.1 微基准测试11
2.1.2 宏基准测试15
2.1.3 介基准测试16
2.2 理解吞吐量、批处理时间和响应时间17
2.2.1 测量批处理时间17
2.2.2 测量吞吐量18
2.2.3 测量响应时间19
2.3 理解可变性22
2.4 早测试、常测试25
2.5 基准测试示例27
2.5.1 Java微基准测试工具27
2.5.2 常用代码示例34
2.6 小结36
第3章 Java性能工具箱38
3.1 操作系统工

和分析38
3.1.1 CPU使用率39
3.1.2 CPU运行队列41
3.1.3 磁盘使用率42
3.1.4 网络使用率44
3.2 Java监控工具45
3.2.1 基本的VM信息46
3.2.2 线程信息48
3.2.3 类信息49
3.2.4 实时GC分析49
3.2.5 堆转储后期处理49
3.3 性能分析工具49
3.3.1 采样分析器50
3.3.2 探查分析器53
3.3.3 阻塞方法和线程时间线54
3.3.4 原生分析器55
3.4 JFR57
3.4.1 JavaMissionControl57
3.4.2 JFR概览58
3.4.3 开启JFR64
3.4.4 选择JFR事件67
3.5 小结69
第4章 使用即时编译器70
4.1 即时编译器:概览70
4.2 分层编译73
4.3 常用的编译器标志74
4.3.1 优化代码缓存74
4.3.2 检查编译过程75
4.3.3 分层编译级别78
4.3.4 逆优化79
4.4 高级编译器标志82
4.4.1 编译阈值82
4.4.2 编译线程83
4.4.3 内联85
4.4.4 逃逸分析86
4.4.5 CPU相关代码87
4.5 分层编译的权衡88
4.6 GraalVM89
4.7 预编译90
4.7.1 提前编译90
4.7.2 GraalVM原生编译92
4.8 小结93
第5章 垃圾回收简介95
5.1 垃圾回收概览95
5.1.1 分代垃圾回收器97
5.1.2 GC算法99
5.1.3 选择GC算法101
5.2 GC优化基础108
5.2.1 调整堆的大小108
5.2.2 调整分代大小110
5.2.3 调整元空间大小112
5.2.4 控制并行113
5.3 GC工具114
5.3.1 在JDK8中开启GC日志114
5.3.2 在JDK11中开启GC日志115
5.4 小结118
第6章 垃圾回收算法119
6.1 理解Throughput回收器119
6.2 理解G1垃圾回收器125
6.3 理解CMS回收器136
6.4 高级优化143
6.4.1 晋升和Survivor空间143
6.4.2 分配大对象146
6.4.3 AggressiveHeap标志152
6.4.4 完全掌控堆的大小153
6.5 实验性GC算法154
6.5.1 并发压缩:ZGC和Shenandoah154
6.5.2 无回收:EpsilonGC156
6.6 小结157
第7章 堆内存最佳实践159
7.1 堆分析159
7.1.1 堆直方图160
7.1.2 堆转储161
7.1.3 内存溢出错误164
7.2 减少内存使用168
7.2.1 减小对象大小169
7.2.2 使用延迟初始化171
7.2.3 使用不可变对象和标准化对象175
7.3 对象生命周期管理176
7.3.1 对象重用177
7.3.2 软引用、弱引用和其他引用181
7.3.3 压缩的普通对象指针193
7.4 小结194
第8章 原生内存最佳实践195
8.1 内存占用195
8.1.1 测量内存占用196
8.1.2 最小化内存占用197
8.1.3 原生内存跟踪197
8.1.4 共享库原生内存201
8.2 针对操作系统的JVM优化204
8.3 小结208
第9章 线程和同步性能209
9.1 线程和硬件209
9.2 线程池和ThreadPoolExecutor210
9.2.1 设置最大线程数210
9.2.2 设置最小线程数213
9.2.3 线程池任务大小215
9.2.4 设置ThreadPoolExecutor的大小215
9.3 ForkJoinPool.217
9.3.1 工作窃取221
9.3.2 自动并行化223
9.4 线程同步224
9.4.1 同步的代价225
9.4.2 避免同步228
9.4.3 伪共享230
9.5 JVM线程优化233
9.5.1 优化线程栈大小234
9.5.2 偏向锁234
9.5.3 线程优先级235
9.6 监控线程和锁235
9.6.1 查看线程235
9.6.2 查看阻塞线程236
9.7 小结239
第10章 Java服务器240
10.1 JavaNIO概览240
10.2 服务器容器242
10.2.1 优化服务器线程池242
10.2.2 异步Rest服务器243
10.3 异步出站调用246
10.4 JSON处理251
10.4.1 解析和编组概览252
10.4.2 JSON对象253
10.4.3 JSON解析254
10.5 小结256
第11章 数据库性能最佳实践257
11.1 示例数据库258
11.2 JDBC258
11.2.1 JDBC驱动258
11.2.2 JDBC连接池260
11.2.3 预处理语句和语句池261
11.2.4 事务262
11.2.5 结果集处理269
11.3 JPA270
11.3.1 优化JPA写271
11.3.2 优化JPA读272
11.3.3 JPA缓存275
11.4 SpringData280
11.5 小结281
第12章 JavaSEAPI技巧282
12.1 字符串282
12.1.1 压缩字符串282
12.1.2 重复字符串和字符串保留283
12.1.3 字符串连接288
12.2 缓冲I/O291
12.3 类加载293
12.4 随机数296
12.5 Java原生接口298
12.6 异常300
12.7 日志303
12.8 Java集合API304
12.8.1 同步和非同步305
12.8.2 设置集合大小306
12.8.3 集合与内存效率307
12.9 Lambda和匿名类308
12.10 流和过滤器的性能310
12.11 对象序列化312
12.11.1 瞬时字段312
12.11.2 覆盖默认的序列化313
12.11.3 压缩序列化数据315
12.11.4 跟踪重复对象317
12.12 小结319
附录 调优标志总结321