Java性能优化圣经!Java之父重磅推荐!
本书由曾任职于Oracle/Sun的性能优化专家编写,系统而详细地讲解了性能优化的各个方面,帮助你学习Java虚拟机的基本原理、掌握一些监控Java程序性能的工具,从而快速找到程序中的性能瓶颈,并有效改善程序的运行性能。
Java性能优化的任何问题,都可以从本书中找到答案!
第1章 策略、方法和方法论1
1.1 性能问题的现状1
1.2 性能分析的两种方法:自顶向下和自底向上4
1.2.1 自顶向下4
1.2.2 自底向上5
1.3 选择正确的平台并评估系统性能5
1.3.1 选择正确的CPU架构6
1.3.2 评估系统性能7
1.4 参考资料7
第2章 操作系统性能监控8
2.1 定义8
2.2 CPU使用率9
2.2.1 监控CPU使用率:Windows9
2.2.2 监控CPU使用率:Windows typeperf12
2.2.3 监控CPU使用率:Linux13
2.2.4 监控CPU使用率:Solaris14
2.2.5 命令行监控CPU使用率:Linux和Solaris16
2.3 CPU调度程序运行队列19
2.3.1 监控CPU调度程序运行队列:Windows19
2.3.2 监控CPU调度程序运行队列:Solaris21
2.3.3 监控CPU调度程序运行队列:Linux21
2.4 内存使用率22
2.4.1 监控内存利用率:Windows22
2.4.2 监控内存使用率:Solaris23
2.4.3 监控内存使用率:Linux24
2.4.4 监控锁竞争:Solaris25
2.4.5 监控锁竞争:Linux26
2.4.6 监控锁竞争:Windows27
2.4.7 隔离竞争锁27
2.4.8 监控抢占式上下文切换27
2.4.9 监控线程迁移28
2.5 网络I/O使用率28
2.5.1 监控网络I/O使用率:Solaris29
2.5.2 监控网络I/O使用率:Linux30
2.5.3 监控网络I/O使用率:Windows30
2.5.4 应用性能改进的考虑31
2.6 磁盘I/O使用率31
2.7 其他命令行工具34
2.8 监控CPU使用率:SPARC T系列系统35
2.9 参考资料36
第3章 JVM概览38
3.1 HotSpot VM的基本架构38
3.2 HotSpot VM运行时40
3.2.1 命令行选项40
3.2.2 VM生命周期41
3.2.3 VM类加载44
3.2.4 字节码验证46
3.2.5 类数据共享47
3.2.6 解释器48
3.2.7 异常处理49
3.2.8 同步50
3.2.9 线程管理51
3.2.10 C++堆管理53
3.2.11 Java本地接口54
3.2.12 VM致命错误处理55
3.3 HotSpot VM垃圾收集器56
3.3.1 分代垃圾收集56
3.3.2 新生代58
3.3.3 快速内存分配60
3.3.4 垃圾收集器60
3.3.5 Serial收集器61
3.3.6 Parallel收集器:吞吐量为先!62
3.3.7Mostly-Concurrent收集器:低延迟为先!62
3.3.8Garbage-First收集器:CMS替代者64
3.3.9 垃圾收集器比较64
3.3.10 应用程序对垃圾收集器的影响65
3.3.11 简单回顾收集器历史65
3.4 HotSpot VM JIT编译器65
3.4.1 类型继承关系分析67
3.4.2 编译策略67
3.4.3 逆优化68
3.4.4 Client JIT编译器概览69
3.4.5 Server JIT编译器概览69
3.4.6 静态单赋值——程序依赖图69
3.4.7 未来增强展望71
3.5 HotSpot VM自适应调优71
3.5.1 Java 1.4.2的默认值71
3.5.2 Java 5自动优化的默认值71
3.5.3 Java 6 Update 18更新后的默认优化值73
3.5.4 自适应Java堆调整74
3.5.5 超越自动优化75
3.6 参考资料75
第4章 JVM性能监控77
4.1 定义77
4.2 垃圾收集78
4.2.1 重要的垃圾收集数据78
4.2.2 垃圾收集报告78
4.2.3 垃圾收集数据的离线分析86
4.2.4 图形化工具89
4.3 JIT编译器103
4.4 类加载104
4.5 Java应用监控106
4.6 参考资料109
第5章 Java应用性能分析110
5.1 术语111
5.1.1 通用性能分析术语111
5.1.2 Oracle Solaris Studio Performance Analyzer术语112
5.1.3 NetBeans Profiler术语112
5.2 Oracle Solaris Studio Performance Analyzer112
5.2.1 支持平台113
5.2.2 下载/安装Oracle Solaris Studio Performance Analyzer114
5.2.3 使用Oracle Solaris Studio Performance Analyzer 抓取性能数据114
5.2.4 查看性能数据118
5.2.5 数据表示125
5.2.6 过滤性能数据128
5.2.7 命令行工具er_print129
5.3 NetBeans Profiler135
5.3.1 支持平台136
5.3.2 下载安装NetBeans Profiler136
5.3.3 开始方法分析会话137
5.3.4 Controls子面板143
5.3.5 Status子面板143
5.3.6 Profiling Results子面板143
5.3.7 Saved Snapshots子面板144
5.3.8 View子面板144
5.3.9 Basic Telemetry子面板144
5.3.10 查看动态结果145
5.3.11 对结果进行快照145
5.3.12 启动内存分析会话146
5.3.13 查看实时结果148
5.3.14 对结果进行快照150
5.3.15 定位内存泄漏150
5.3.16 分析堆转储151
5.4 参考资料152
第6章 Java应用性能分析技巧153
6.1 性能优化机会153
6.2 系统或内核态CPU使用154
6.3 锁竞争161
6.4 Volatile的使用171
6.5 调整数据结构的大小172
6.5.1 StringBuilder或StringBuffer大小的调整172
6.5.2 Java Collection类大小调整175
6.6 增加并行性179
6.7 过高的CPU使用率181
6.8 其他有用的分析提示182
6.9 参考资料184
第7章 JVM性能调优入门185
7.1 方法185
7.1.1 假设条件187
7.1.2 测试基础设施需求188
7.2 应用程序的系统需求188
7.2.1 可用性188
7.2.2 可管理性188
7.2.3 吞吐量189
7.2.4 延迟及响应性189
7.2.5 内存占用189
7.2.6 启动时间189
7.3 对系统需求分级190
7.4 选择JVM部署模式190
7.4.1 单JVM部署模式190
7.4.2 多JVM部署模式190
7.4.3 通用建议191
7.5 选择JVM运行模式191
7.5.1 Client模式或Server模式191
7.5.2 32位/64位 JVM192
7.5.3 垃圾收集器192
7.6 垃圾收集调优基础193
7.6.1 性能属性193
7.6.2 原则193
7.6.3 命令行选项及GC日志194
7.7 确定内存占用197
7.7.1 约束197
7.7.2 HotSpot VM堆的布局197
7.7.3 堆大小调优着眼点200
7.7.4 计算活跃数据大小201
7.7.5 初始堆空间大小配置202
7.7.6 其他考量因素203
7.8 调优延迟/响应性204
7.8.1 输入205
7.8.2 优化新生代的大小205
7.8.3 优化老年代的大小207
7.8.4 为CMS调优延迟210
7.8.5 Survivor空间介绍212
7.8.6 解析晋升阈值214
7.8.7 监控晋升阈值215
7.8.8 调整Survivor空间的容量216
7.8.9 显式的垃圾收集222
7.8.10 并发永久代垃圾收集223
7.8.11 调优CMS停顿时间224
7.8.12 下一步225
7.9 应用程序吞吐量调优225
7.9.1 CMS吞吐量调优225
7.9.2 Throughput收集器调优226
7.9.3 Survivor空间调优228
7.9.4 调优并行垃圾收集线程231
7.9.5 在NUMA系统上部署231
7.9.6 下一步232
7.10 极端示例232
7.11 其他性能命令行选项232
7.11.1 实验性(最近最大)优化232
7.11.2 逃逸分析233
7.11.3 偏向锁233
7.11.4 大页面支持234
7.12 参考资料236
第8章 Java应用的基准测试237
8.1 基准测试所面临的挑战237
8.1.1 基准测试的预热阶段238
8.1.2 垃圾收集240
8.1.3 使用Java Time接口240
8.1.4 剔除无效代码241
8.1.5 内联247
8.1.6 逆优化251
8.1.7 创建微基准测试的注意事项256
8.2 实验设计257
8.3 使用统计方法258
8.3.1 计算均值258
8.3.2 计算标准差258
8.3.3 计算置信区间259
8.3.4 使用假设测试260
8.3.5 使用统计方法的注意事项262
8.4 参考文献263
8.5 参考资料263
第9章 多层应用的基准测试264
9.1 基准测试难题264
9.2 企业级应用基准测试的考量266
9.2.1 定义被测系统266
9.2.2 制定微基准测试266
9.2.3 定义用户交互模型267
9.2.4 定义性能指标270
9.2.5 扩展基准测试273
9.2.6 用利特尔法则验证274
9.2.7 思考时间275
9.2.8 扩展性分析278
9.2.9 运行基准测试278
9.3 应用服务器监控281
9.3.1 GlassFish监控281
9.3.2 监控子系统286
9.3.3 Solaris287
9.3.4 Linux288
9.3.5 Windows288
9.3.6 外部系统的性能289
9.3.7 磁盘I/O292
9.3.8 监控和调优资源池293
9.4 企业级应用性能分析294
9.5 参考资料295
第10章 Web应用的性能调优297
10.1 Web应用的基准测试298
10.2 Web容器的组件298
10.2.1 HTTP连接器299
10.2.2 Servlet引擎300
10.3 Web容器的监控和性能调优300
10.3.1 容器的开发和生产模式300
10.3.2 安全管理器301
10.3.3 JVM调优301
10.3.4 HTTP服务和Web容器303
10.3.5 HTTP监听器303
10.4 最佳实践315
10.4.1 Servlet和JSP最佳实践315
10.4.2 内容缓存324
10.4.3 会话持久化328
10.4.4 HTTP服务器文件缓存329
10.5 参考资料333
第11章 Web Service的性能334
11.1 XML的性能334
11.1.1 XML处理的生命周期335
11.1.2 解析/解编组335
11.1.3 访问338
11.1.4 修改338
11.1.5 序列化/编组339
11.2 验证339
11.3 解析外部实体341
11.4 XML文档的局部处理343
11.5 选择合适的API346
11.6 JAX-WS参考实现栈349
11.7 Web Service基准测试350
11.8 影响Web Service性能的因素353
11.8.1 消息大小的影响353
11.8.2 不同Schema类型的性能特征355
11.8.3 终端服务器的实现358
11.8.4 处理程序的性能359
11.9 最佳性能实践361
11.9.1 二进制负载的处理361
11.9.2 处理XML文档365
11.9.3 使用MTOM发送XML文档365
11.9.4 使用Provider接口368
11.9.5 快速信息集370
11.9.6 HTTP压缩372
11.9.7 Web Service客户端的性能373
11.10 参考资料374
第12章 Java持久化及Enterprise Java Bean的性能375
12.1 EJB编程模型376
12.2 Java持久化API及其参考实现376
12.3 监控及调优EJB容器379
12.3.1 线程池380
12.3.2 Bean池和缓存382
12.3.3 EclipseLink会话缓存385
12.4 事务隔离级386
12.5 Enterprise Java Bean的最佳实践387
12.5.1 简要说明使用的EJB基准测试387
12.5.2 EJB 2.1388
12.5.3 EJB 3.0400
12.6 Java持久化最佳实践403
12.6.1 JPA查询语言中的查询403
12.6.2 查询结果缓存405
12.6.3 FetchType406
12.6.4 连接池408
12.6.5 批量更新409
12.6.6 选择正确的数据库锁策略411
12.6.7 不带事务的读取411
12.6.8 继承411
12.7 参考资料412
附录A 重要的HotSpot VM选项413
附录B 性能分析技巧示例源代码429
B.1 锁竞争实现1429
B.2 锁竞争实现2439
B.3 锁竞争实现3449
B.4 锁竞争实现4459
B.5 锁竞争实现5469
B.6 调整容量变化1481
B.7 调整容量变化2492
B.8 增加并发性的单线程实现504
B.9 增加并发性的多线程实现514
本书由浅入深、循序渐进地介绍了HTML、XHTML和CSS的语法、元素、属性的使用方法,介绍了如何使用(X)HTML和CSS编写符合标准的Web页
Go并发编程实战-第2版 本书特色 本书首先介绍了Go语言的优势特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据类型以及流程控制方法,接着阐述了与多...
unity,也称unity3d,是近几年非常流行的一个3d游戏开发引擎,跨平台能力强,使用它开发的手机游戏数不胜数。《unity3d手机游戏开
本书是第一本对日本计算机和通信产业的演化历史进行全面分析的著作,弗朗斯曼教授在研究上填补了这一空白,得到了各国众多知名学
《独坐》内容简介:阅读的过程,从一开始的“围坐”渐渐变成“独坐”的时候,你也许已经能够在那书本知识的五彩斑斓里遨游了,或许
《互联网+教育:技术应用》内容简介:本书围绕教育发展过程中不断出现的新需求及应对各种需求的技术应用,从互联网+教育在教育信息
《从零开始学HTML+CSS》分为3篇,共12章。第1篇是HTML基础(第1~2章),第2篇是HTML应用篇(第3~10章),第3篇是CSS的使用(第
《Spring Batch批处理框架》内容简介:本书全面、系统地介绍了批处理框架Spring Batch,通过详尽的实战示例向读者展示了Spring Bat
基于贝叶斯网络的结构系统可靠性评估方法 内容简介 本书是在作者近几年的研究成果上著作而成的,着眼于VA族元素形成的二维材料体系,采用基于密度泛函理论的性原理研究...
《礼义之邦》内容简介:礼仪是礼的形式,礼义则是礼的本质。所有礼仪活动或者礼仪程序的背后,都蕴含有特定的道德认同、价值导向、
《C语言从入门到精通》从初学者的角度出发,以通俗易懂的语言,丰富多彩的实例,详细介绍了使用C语言进行程序开发应该掌握的各方
《西线无战事》内容简介:第一次世界大战开始后不久,保罗和同学们怀着英雄主义的理想,志愿报名参军。经过短暂的训练后,他们被送
《看不見的聲音,聽不到的畫》創作的衝動通常是在遠離道理的地方發生為的是內心那張未完成的地圖記憶.日常.現在與未來活躍於日
《信息安全精要:从概念到安全性评估》内容简介:本书以现实世界的安全入侵事件为例,探讨了操作安全、网络设计、操作系统强化和修
《5000天后的世界》内容简介:在互联网商业化的5000天后,社交媒体(SNS)开始蓬勃兴起, 现在距SNS兴起又过了近5000天,接下来的5
Informationretrievalisasub-fieldofcomputersciencethatdealswiththeautomatedstorag...
《自由职业设计师工作手册》对那些希望成为一个长期而成功的自由设计师来说,是一本实用性很强并附有插图的案头参考工具书。内容
《意志力》内容简介:《意志力》是一本风靡全世界的心理学通俗读物。被拖延症困扰?面临情感纠葛?减肥总是反弹?控制不住购物的冲
《思维导图:文言文满分学习法》内容简介:本书运用思维导图这种可视化的思维技术,运用图文并茂的形式和严谨的逻辑结构将中学阶段
就像报纸、杂志等媒体无处不在一样,电脑了已经被应用于日常生活的各种场合。这个远处不在的电脑世界已成为艺术表现的媒体,带着