当前位置:当前位置:主页 > 计算机电子书 > Java > Java优化 pdf电子书
Java性能优化实践(JVM调优策略/工具与技巧)

Java性能优化实践(JVM调优策略/工具与技巧) PDF 高质量版

  • 更新:2021-04-30
  • 大小:69 MB
  • 类别:Java优化
  • 作者:本杰明·J.、埃文斯
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

Java性能优化实践(JVM调优策略/工具与技巧)》是由人民邮电出版社出版的一本关于Java优化方面的书籍,作者是本杰明·J.、埃文斯,主要介绍了关于Java性能优化、JVM调优策略、JVM工具与技巧方面的知识内容,目前在Java优化类书籍综合评分为:9.9分。

书籍介绍

编辑推荐

在当前的互联网开发模式下,系统访问量日增、代码臃肿,各种性能问题纷涌而至。性能优化作为一个常谈常新的话题,受到越来越多开发者的关注。而Java是一门使用广泛的语言,社区生态中积攒了大量宝贵的性能优化经验。

1.作为一本性能调优方面的实用指南,本书从实验科学的角度将JVM调优的技术原理与方法论相结合,并在此基础上提供了可选择的工具。

2.通过对各方面的深入研究,本书能让使用复杂技术栈的中高级Java技术专家以量化和可验证的方法优化Java应用程序性能。

了解Java的原则和技术如何充分利用现代硬件和操作系统

探究一些性能测试以及困扰团队的常见反模式

理解测量Java性能数据的陷阱以及微基准测试的缺点

深入研究JVM垃圾收集日志、监控、调优和工具

探究JIT编译和Java语言性能技术

学习Java集合类API与性能有关的方面,从整体上理解Java并发

内容简介

本书从实验科学的角度探讨了Java性能优化的方方面面,重点阐述了*的实用JVM性能调优策略、工具和技巧。通过本书,我们不仅可以了解Java原理和技术如何充分利用现代硬件和操作系统、衡量Java性能的陷阱以及微基准测试的弊端有哪些,还能深入研究可能使团队烦恼的几种性能测试和常见反模式、JVM垃圾收集、JIT编译和Java语言性能技术等。本书为读者打开了深入理解Java性能的大门,并以路标助力其优化之旅。

目录

  • 中文版推荐序一 xv
  • 中文版推荐序二 xvi
  • 序 xvii
  • 前言 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 42
  • 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
  • 8.2.2 GCViewer 139
  • 8.2.3 对于同一数据的不同可视化效果 140
  • 8.3 基本垃圾收集调优 141
  • 8.3.1 理解分配行为 142
  • 8.3.2 理解暂停时间 144
  • 8.3.3 收集器线程和GC根 145
  • 8.4 调优Parallel GC 147
  • 8.5 调优CMS 148
  • 8.6 调优G1 150
  • 8.7 jHiccup 152
  • 8.8 小结 154
  • 第 9 章 JVM上的代码执行 155
  • 9.1 字节码解释概览 155
  • 9.1.1 JVM字节码 158
  • 9.1.2 简单解释器 163
  • 9.1.3 HotSpot特定细节 165
  • 9.2 AOT编译和JIT编译 166
  • 9.2.1 AOT编译 166
  • 9.2.2 JIT编译 167
  • 9.2.3 比较AOT和JIT 168
  • 9.3 HotSpot JIT基础 168
  • 9.3.1 Klass字、虚函数表和指针变换 168
  • 9.3.2 JIT编译日志 169
  • 9.3.3 HotSpot中的编译器 171
  • 9.3.4 HotSpot中的分层编译 171
  • 9.4 代码缓存 172
  • 9.5 简单JIT调优 173
  • 9.6 小结 174
  • 第 10 章 理解即时编译 175
  • 10.1 认识JITWatch 175
  • 10.1.1 基本的JITWatch视图 176
  • 10.1.2 调试JVM和hsdi 180
  • 10.2 介绍JIT编译 180
  • 10.3 内联 181
  • 10.3.1 内联的限制 182
  • 10.3.2 调优内联子系统 183
  • 10.4 循环展开 184
  • 10.5 逃逸分析 186
  • 10.5.1 消除堆分配 187
  • 10.5.2 锁与逃逸分析 188
  • 10.5.3 逃逸分析的限制 189
  • 10.6 单态分派 192
  • 10.7 内部函数 195
  • 10.8 栈上替换 197
  • 10.9 再谈安全点 199
  • 10.10 核心库方法 199
  • 10.10.1 内联方法的大小上限 199
  • 10.10.2 编译方法的大小上限 203
  • 10.11 小结 204
  • 第 11 章 Java语言性能技术 205
  • 11.1 优化集合 206
  • 11.2 针对列表的优化考虑 207
  • 11.2.1 ArrayList 207
  • 11.2.2 LinkedList 208
  • 11.2.3 ArrayList与LinkedList的对比 209
  • 11.3 针对映射的优化考虑 210
  • 11.3.1 HashMap 210
  • 11.3.2 TreeMap 212
  • 11.3.3 缺少MultiMap 213
  • 11.4 针对集的优化考虑 213
  • 11.5 领域对象 213
  • 11.6 避免终结化 216
  • 11.6.1 血泪史:忘记清理 217
  • 11.6.2 为什么不使用终结化来解决这个问题 217
  • 11.6.3 try-with-resources 219
  • 11.7 方法句柄 223
  • 11.8 小结 226
  • 第 12 章 并发性能技术 227
  • 12.1 并行介绍 228
  • 12.2 理解JMM 232
  • 12.3 构建并发库 236
  • 12.3.1 Unsafe 237
  • 12.3.2 原子与CAS 238
  • 12.3.3 锁和自旋锁 239
  • 12.4 并发库总结 240
  • 12.4.1 java.util.concurrent中的Lock 240
  • 12.4.2 读/ 写锁 241
  • 12.4.3 信号量 242
  • 12.4.4 并发集合 242
  • 12.4.5 锁存器和屏障 243
  • 12.5 执行器和任务抽象 245
  • 12.5.1 认识异步执行 245
  • 12.5.2 选择一个ExecutorService 246
  • 12.5.3 Fork/Join 246
  • 12.6 现代Java并发 248
  • 12.6.1 流和并行流 248
  • 12.6.2 无锁技术 249
  • 12.6.3 基于Actor的技术 250
  • 12.7 小结 251
  • 第 13 章 剖析 252
  • 13.1 认识剖析 252
  • 13.2 采样与安全点偏差 253
  • 13.3 面向开发人员的执行剖析工具 255
  • 13.3.1 VisualVM剖析器 255
  • 13.3.2 JProfiler 256
  • 13.3.3 YourKit 261
  • 13.3.4 Java Flight Recorder和Java Mission Control 262
  • 13.3.5 运维工具 266
  • 13.4 现代剖析器 269
  • 13.5 分配剖析器 272
  • 13.6 堆转储分析 278
  • 13.7 小结 280
  • 第 14 章 高性能日志和消息系统 281
  • 14.1 日志 282
  • 14.2 设计一个影响较低的日志记录器 284
  • 14.3 使用Real Logic库实现低延迟 286
  • 14.3.1 Agrona 287
  • 14.3.2 Simple Binary Encoding 291
  • 14.3.3 Aeron 294
  • 14.3.4 Aeron的设计 296
  • 14.4 小结 299
  • 第 15 章 Java 9以及Java的未来方向 300
  • 15.1 Java 9中小的性能增强 301
  • 15.1.1 分段式代码缓存 301
  • 15.1.2 紧凑的字符串 301
  • 15.1.3 新的字符串连接 302
  • 15.1.4 C2编译器的改进 303
  • 15.1.5 新版G1收集器 304
  • 15.2 Java 10和未来版本 305
  • 15.2.1 新的发布流程 305
  • 15.2.2 Java 10 305
  • 15.3 Java 9及更高版本中的Unsafe 307
  • 15.4 Valhalla项目和值类型 308
  • 15.5 Graal和Truffle 312
  • 15.6 字节码的未来方向 313
  • 15.7 并发的未来方向 315
  • 15.8 总结 316
  • 作者介绍 318
  • 封面介绍 318

资源获取

相关资源

网友留言