大话Java性能优化
第1章 性能调优策略概述.. 1
1.1 为什么需要调优... 1
1.2 性能优化的参考因素... 5
1.2.1 传统计算机体系的分歧... 5
1.2.2 导致系统瓶颈的计算资源... 7
1.2.3 程序性能衡量指标... 8
1.2.4 性能优化目标... 9
1.2.5 性能优化策略... 10
1.3 性能调优分类方法... 11
1.3.1 业务方面... 12
查看完整
1.1 为什么需要调优... 1
1.2 性能优化的参考因素... 5
1.2.1 传统计算机体系的分歧... 5
1.2.2 导致系统瓶颈的计算资源... 7
1.2.3 程序性能衡量指标... 8
1.2.4 性能优化目标... 9
1.2.5 性能优化策略... 10
1.3 性能调优分类方法... 11
1.3.1 业务方面... 12
查看完整
周明耀,12年投资银行项目、分布式计算项目工作经验,IBM开发者论坛专家作者。一名IT技术狂热爱好者,一名顽强到底的工程师。推崇技术创新、思维创新,对于新技术非常的热爱,致力于技术研发、研究,通过发布文章、书籍、互动活动的形式积极推广软件技术。欢迎添加作者微信“michael_tec”,共同探讨IT技术话题。
本书主要提供Java性能调优方面的参考建议及经验交流。作者力求做到知识的综合传播,而不是仅仅只针对Java虚拟机调优进行讲解,另外力求每一章节都有实际的案例支撑。具体包括:性能优化策略、程序编写及硬件服务器的基础知识、Java API优化建议、算法类程序的优化建议、并行计算优化建议、Java程序性能监控及检测、JVM原理知识、其他相关优化知识等。
通读本书后,读者可以深入了解Java性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。
总的来说,性能调优在很大程度上是一门艺术,解决的Java性能问题越多,技艺才会越精湛。我们不仅要关心JVM的持续演进,也要积极地去了解底层的硬件平台和操作系统的进步。
通读本书后,读者可以深入了解Java性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。
总的来说,性能调优在很大程度上是一门艺术,解决的Java性能问题越多,技艺才会越精湛。我们不仅要关心JVM的持续演进,也要积极地去了解底层的硬件平台和操作系统的进步。
第1章 性能调优策略概述.. 1
1.1 为什么需要调优... 1
1.2 性能优化的参考因素... 5
1.2.1 传统计算机体系的分歧... 5
1.2.2 导致系统瓶颈的计算资源... 7
1.2.3 程序性能衡量指标... 8
1.2.4 性能优化目标... 9
1.2.5 性能优化策略... 10
1.3 性能调优分类方法... 11
1.3.1 业务方面... 12
1.3.2 基础技术方面... 12
1.3.3 组件方面... 17
1.3.4 架构方面... 19
1.3.5 层次方面... 20
1.4 本章小结... 21
第2章 优化前的准备知识.. 22
2.1 服务器知识... 23
2.1.1 内存... 23
2.1.2 GPU/CPU.. 44
2.1.3 硬盘... 49
2.1.4 网络架构... 51
2.2 新兴技术... 53
第3章 Java API调用优化建议.. 54
3.1 面向对象及基础类型... 55
3.1.1 采用Clone()方式创建对象... 55
3.1.2 避免对boolean判断... 55
3.1.3 多用条件操作符... 56
3.1.4 静态方法代替实例方法... 56
3.1.5 有条件地使用final关键字... 58
3.1.6 避免不需要的instanceof操作... 58
3.1.7 避免子类中存在父类转换... 59
3.1.8 建议多使用局部变量... 60
3.1.9 运算效率的方式——位运算... 60
3.1.10 用一维数组代替二维数组... 62
3.1.11 布尔运算代替位运算... 64
3.1.12 提取表达式优化... 65
3.1.13 不要总是使用取反操作符(!) 66
3.1.14 不要重复初始化变量... 66
3.1.15 变量初始化过程思考... 66
3.1.16 对象的创建、访问过程... 69
3.1.17 在switch语句中使用字符串... 70
3.1.18 数值字面量的改进... 73
3.1.19 优化变长参数的方法调用... 74
3.1.20 针对基本数据类型的优化... 75
3.1.21 空变量... 76
3.2 集合类概念... 77
3.2.1 快速删除List里面的数据... 78
3.2.2 集合内部避免返回null 80
3.2.3 ArrayList、LinkedList比较... 82
3.2.4 Vector、HashTable比较... 85
3.2.5 HashMap使用经验... 87
3.2.6 EnumSet、EnumMap. 91
3.2.7 HashSet使用经验... 92
3.2.8 LinkedHashMap、TreeMap比较... 96
3.2.9 集合处理优化新方案... 99
3.2.10 优先考虑并行计算... 107
3.3 字符串概念... 108
3.3.1 String对象... 108
3.3.2 善用String对象的SubString方法... 111
3.3.3 用charat()代替startswith() 113
3.3.4 在字符串相加的时候,使用' '代替" ". 114
3.3.5 字符串切割... 114
3.3.6 字符串重编码... 117
3.3.7 合并字符串... 118
3.3.8 正则表达式不是的... 122
3.4 引用类型概念... 123
3.4.1 强引用(Strong Reference)... 126
3.4.2 软引用(Soft Reference)... 131
3.4.3 弱引用(Weak Reference)... 135
3.4.4 引用队列... 141
3.4.5 虚引用(Phantom Reference)... 142
3.5 其他相关概念... 146
3.5.1 JNI技术提升... 146
3.5.2 异常捕获机制... 150
3.5.3 ExceptionUtils类... 154
3.5.4 循环技巧... 155
3.5.5 替换switch. 157
3.5.6 优化循环... 158
3.5.7 使用arrayCopy() 159
3.5.8 使用Buffer进行I/O操作... 161
3.5.9 使用clone()代替new.. 164
3.5.10 I/O速度... 166
3.5.11 Finally方法里面释放或者关闭资源占用... 167
3.5.12 资源管理机制... 167
3.5.13 牺牲CPU时间... 169
3.5.14 对象操作... 172
3.5.15 正则表达式... 172
3.5.16 压缩文件处理... 174
3.6 本章小结... 175
第4章 程序设计优化建议.. 176
4.1 算法优化概述... 176
4.1.1 常用算法逻辑描述... 177
4.1.2 多核算法优化原理... 186
4.1.3 Java算法优化实践... 188
4.2 设计模式... 196
4.2.1 设计模式的六大准则... 196
4.2.2 单一对象控制... 200
4.2.3 并行程序设计模式... 202
4.2.4 接口适配... 205
4.2.5 访问方式隔离... 219
4.3 I/O及网络相关优化... 225
4.3.1 I/O操作优化... 225
4.3.2 Socket编程... 231
4.3.3 NIO 2.0文件系统... 235
4.4 数据应用优化... 236
4.4.1 关系型数据库优化... 236
4.4.2 向HBase插入大量数据... 240
4.4.3 解决海量数据缓存... 251
4.5 其他优化... 256
4.5.1 Web系统性能优化建议... 256
4.5.2 死锁情况解决方案... 259
4.5.3 JavaBeans组件... 268
4.6 本章小结... 269
第5章 Java并行程序优化建议.. 270
5.1 并行程序优化概述... 270
5.1.1 资源限制带来的挑战... 271
5.1.2 进程、线程、协程... 272
5.1.3 使用多线程的原因... 281
5.1.4 线程不安全范例... 282
5.1.5 重排序机制... 284
5.1.6 实例变量的数据共享... 286
5.1.7 生产者与消费者模式... 288
5.1.8 线程池的使用... 290
5.2 锁机制对比... 296
5.2.1 锁机制概述... 296
5.2.2 Synchronized使用技巧... 298
5.2.3 Volatile的使用技巧... 303
5.2.4 队列同步器... 304
5.2.5 可重入锁... 307
5.2.6 读写锁... 308
5.2.7 偏向锁和轻量级锁... 309
5.3 增加程序并行性... 310
5.3.1 并发计数器... 311
5.3.2 减少上下文切换次数... 312
5.3.3 针对Thread类的更新... 314
5.3.4 Fork/Join框架... 314
5.3.5 Executor框架... 318
5.4 JDK类库使用... 319
5.4.1 原子值... 320
5.4.2 并行容器... 324
5.4.3 非阻塞队列... 332
5.4.4 阻塞队列... 338
5.4.5 并发工具类... 365
5.5 本章小结... 376
第6章 JVM性能测试及监控.. 377
6.1 监控计算机设备层... 378
6.1.1 监控CPU.. 380
6.1.2 监控内存... 405
6.1.3 监控磁盘... 417
6.1.4 监控网络... 423
6.2 监控JVM活动... 428
6.2.1 监控垃圾收集目的... 429
6.2.2 GC垃圾回收报告分析... 430
6.2.3 图形化工具... 431
6.2.4 GC跟踪示例... 437
6.3 本章小结... 438
第7章 JVM性能调优建议.. 439
7.1 JVM相关概念... 439
7.1.1 内存使用相关概念... 440
7.1.2 字节码相关知识... 443
7.1.3 自动内存管理... 448
7.2 JVM系统架构... 451
7.2.1 JVM的基本架构... 451
7.2.2 JVM初始化过程... 453
7.2.3 JVM架构模型与执行引擎... 456
7.2.4 解释器与JIT编译器... 456
7.2.5 类加载机制... 457
7.2.6 虚拟机... 458
7.3 垃圾回收机制相关... 459
7.3.1 GC相关概念... 459
7.3.2 垃圾回收算法... 468
7.3.3 垃圾收集器... 476
7.4 实用JVM实验... 490
7.4.1 将新对象预留在年轻代... 490
7.4.2 大对象进入年老代... 494
7.4.3 设置对象进入年老代的年龄... 495
7.4.4 稳定与震荡的堆大小... 497
7.4.5 吞吐量优先案例... 498
7.4.6 使用大页案例... 499
7.4.7 降低停顿案例... 499
7.4.8 设置堆内存... 499
7.4.9 设置小堆内存... 500
7.4.10 设置年轻代... 503
7.4.11 设置持久代... 504
7.4.12 设置线程栈... 504
7.4.13 堆的比例分配... 505
7.4.14 堆分配参数总结... 508
7.4.15 垃圾回收器相关参数总结... 509
7.4.16 查询GC命令... 515
7.5 本章小结... 515
第8章 其他优化建议.. 516
8.1 Java现有机制及未来发展... 516
8.1.1 Java体系结构变化历史... 516
8.1.2 Java语言面临的挑战... 520
8.1.3 Java 8的新特性... 522
8.1.4 Java语言前景... 523
8.1.5 物联网:Java和你是一对... 524
8.1.6 Java模块化发展... 525
8.1.7 OpenJDK的发展... 527
8.2 系统架构优化建议... 528
8.2.1 系统架构调优... 528
8.2.2 Java项目优化方式分享... 530
8.2.3 面向服务架构... 534
8.2.4 程序隔离技术... 538
8.2.5 团队并行开发准则... 544
8.3 与编程无关... 546
8.3.1 工程师品格... 546
8.3.2 如何成为技术大牛... 547
8.3.3 编程方法分享... 548
8.4 本章小结... 549
^ 收 起
1.1 为什么需要调优... 1
1.2 性能优化的参考因素... 5
1.2.1 传统计算机体系的分歧... 5
1.2.2 导致系统瓶颈的计算资源... 7
1.2.3 程序性能衡量指标... 8
1.2.4 性能优化目标... 9
1.2.5 性能优化策略... 10
1.3 性能调优分类方法... 11
1.3.1 业务方面... 12
1.3.2 基础技术方面... 12
1.3.3 组件方面... 17
1.3.4 架构方面... 19
1.3.5 层次方面... 20
1.4 本章小结... 21
第2章 优化前的准备知识.. 22
2.1 服务器知识... 23
2.1.1 内存... 23
2.1.2 GPU/CPU.. 44
2.1.3 硬盘... 49
2.1.4 网络架构... 51
2.2 新兴技术... 53
第3章 Java API调用优化建议.. 54
3.1 面向对象及基础类型... 55
3.1.1 采用Clone()方式创建对象... 55
3.1.2 避免对boolean判断... 55
3.1.3 多用条件操作符... 56
3.1.4 静态方法代替实例方法... 56
3.1.5 有条件地使用final关键字... 58
3.1.6 避免不需要的instanceof操作... 58
3.1.7 避免子类中存在父类转换... 59
3.1.8 建议多使用局部变量... 60
3.1.9 运算效率的方式——位运算... 60
3.1.10 用一维数组代替二维数组... 62
3.1.11 布尔运算代替位运算... 64
3.1.12 提取表达式优化... 65
3.1.13 不要总是使用取反操作符(!) 66
3.1.14 不要重复初始化变量... 66
3.1.15 变量初始化过程思考... 66
3.1.16 对象的创建、访问过程... 69
3.1.17 在switch语句中使用字符串... 70
3.1.18 数值字面量的改进... 73
3.1.19 优化变长参数的方法调用... 74
3.1.20 针对基本数据类型的优化... 75
3.1.21 空变量... 76
3.2 集合类概念... 77
3.2.1 快速删除List里面的数据... 78
3.2.2 集合内部避免返回null 80
3.2.3 ArrayList、LinkedList比较... 82
3.2.4 Vector、HashTable比较... 85
3.2.5 HashMap使用经验... 87
3.2.6 EnumSet、EnumMap. 91
3.2.7 HashSet使用经验... 92
3.2.8 LinkedHashMap、TreeMap比较... 96
3.2.9 集合处理优化新方案... 99
3.2.10 优先考虑并行计算... 107
3.3 字符串概念... 108
3.3.1 String对象... 108
3.3.2 善用String对象的SubString方法... 111
3.3.3 用charat()代替startswith() 113
3.3.4 在字符串相加的时候,使用' '代替" ". 114
3.3.5 字符串切割... 114
3.3.6 字符串重编码... 117
3.3.7 合并字符串... 118
3.3.8 正则表达式不是的... 122
3.4 引用类型概念... 123
3.4.1 强引用(Strong Reference)... 126
3.4.2 软引用(Soft Reference)... 131
3.4.3 弱引用(Weak Reference)... 135
3.4.4 引用队列... 141
3.4.5 虚引用(Phantom Reference)... 142
3.5 其他相关概念... 146
3.5.1 JNI技术提升... 146
3.5.2 异常捕获机制... 150
3.5.3 ExceptionUtils类... 154
3.5.4 循环技巧... 155
3.5.5 替换switch. 157
3.5.6 优化循环... 158
3.5.7 使用arrayCopy() 159
3.5.8 使用Buffer进行I/O操作... 161
3.5.9 使用clone()代替new.. 164
3.5.10 I/O速度... 166
3.5.11 Finally方法里面释放或者关闭资源占用... 167
3.5.12 资源管理机制... 167
3.5.13 牺牲CPU时间... 169
3.5.14 对象操作... 172
3.5.15 正则表达式... 172
3.5.16 压缩文件处理... 174
3.6 本章小结... 175
第4章 程序设计优化建议.. 176
4.1 算法优化概述... 176
4.1.1 常用算法逻辑描述... 177
4.1.2 多核算法优化原理... 186
4.1.3 Java算法优化实践... 188
4.2 设计模式... 196
4.2.1 设计模式的六大准则... 196
4.2.2 单一对象控制... 200
4.2.3 并行程序设计模式... 202
4.2.4 接口适配... 205
4.2.5 访问方式隔离... 219
4.3 I/O及网络相关优化... 225
4.3.1 I/O操作优化... 225
4.3.2 Socket编程... 231
4.3.3 NIO 2.0文件系统... 235
4.4 数据应用优化... 236
4.4.1 关系型数据库优化... 236
4.4.2 向HBase插入大量数据... 240
4.4.3 解决海量数据缓存... 251
4.5 其他优化... 256
4.5.1 Web系统性能优化建议... 256
4.5.2 死锁情况解决方案... 259
4.5.3 JavaBeans组件... 268
4.6 本章小结... 269
第5章 Java并行程序优化建议.. 270
5.1 并行程序优化概述... 270
5.1.1 资源限制带来的挑战... 271
5.1.2 进程、线程、协程... 272
5.1.3 使用多线程的原因... 281
5.1.4 线程不安全范例... 282
5.1.5 重排序机制... 284
5.1.6 实例变量的数据共享... 286
5.1.7 生产者与消费者模式... 288
5.1.8 线程池的使用... 290
5.2 锁机制对比... 296
5.2.1 锁机制概述... 296
5.2.2 Synchronized使用技巧... 298
5.2.3 Volatile的使用技巧... 303
5.2.4 队列同步器... 304
5.2.5 可重入锁... 307
5.2.6 读写锁... 308
5.2.7 偏向锁和轻量级锁... 309
5.3 增加程序并行性... 310
5.3.1 并发计数器... 311
5.3.2 减少上下文切换次数... 312
5.3.3 针对Thread类的更新... 314
5.3.4 Fork/Join框架... 314
5.3.5 Executor框架... 318
5.4 JDK类库使用... 319
5.4.1 原子值... 320
5.4.2 并行容器... 324
5.4.3 非阻塞队列... 332
5.4.4 阻塞队列... 338
5.4.5 并发工具类... 365
5.5 本章小结... 376
第6章 JVM性能测试及监控.. 377
6.1 监控计算机设备层... 378
6.1.1 监控CPU.. 380
6.1.2 监控内存... 405
6.1.3 监控磁盘... 417
6.1.4 监控网络... 423
6.2 监控JVM活动... 428
6.2.1 监控垃圾收集目的... 429
6.2.2 GC垃圾回收报告分析... 430
6.2.3 图形化工具... 431
6.2.4 GC跟踪示例... 437
6.3 本章小结... 438
第7章 JVM性能调优建议.. 439
7.1 JVM相关概念... 439
7.1.1 内存使用相关概念... 440
7.1.2 字节码相关知识... 443
7.1.3 自动内存管理... 448
7.2 JVM系统架构... 451
7.2.1 JVM的基本架构... 451
7.2.2 JVM初始化过程... 453
7.2.3 JVM架构模型与执行引擎... 456
7.2.4 解释器与JIT编译器... 456
7.2.5 类加载机制... 457
7.2.6 虚拟机... 458
7.3 垃圾回收机制相关... 459
7.3.1 GC相关概念... 459
7.3.2 垃圾回收算法... 468
7.3.3 垃圾收集器... 476
7.4 实用JVM实验... 490
7.4.1 将新对象预留在年轻代... 490
7.4.2 大对象进入年老代... 494
7.4.3 设置对象进入年老代的年龄... 495
7.4.4 稳定与震荡的堆大小... 497
7.4.5 吞吐量优先案例... 498
7.4.6 使用大页案例... 499
7.4.7 降低停顿案例... 499
7.4.8 设置堆内存... 499
7.4.9 设置小堆内存... 500
7.4.10 设置年轻代... 503
7.4.11 设置持久代... 504
7.4.12 设置线程栈... 504
7.4.13 堆的比例分配... 505
7.4.14 堆分配参数总结... 508
7.4.15 垃圾回收器相关参数总结... 509
7.4.16 查询GC命令... 515
7.5 本章小结... 515
第8章 其他优化建议.. 516
8.1 Java现有机制及未来发展... 516
8.1.1 Java体系结构变化历史... 516
8.1.2 Java语言面临的挑战... 520
8.1.3 Java 8的新特性... 522
8.1.4 Java语言前景... 523
8.1.5 物联网:Java和你是一对... 524
8.1.6 Java模块化发展... 525
8.1.7 OpenJDK的发展... 527
8.2 系统架构优化建议... 528
8.2.1 系统架构调优... 528
8.2.2 Java项目优化方式分享... 530
8.2.3 面向服务架构... 534
8.2.4 程序隔离技术... 538
8.2.5 团队并行开发准则... 544
8.3 与编程无关... 546
8.3.1 工程师品格... 546
8.3.2 如何成为技术大牛... 547
8.3.3 编程方法分享... 548
8.4 本章小结... 549
^ 收 起
周明耀,12年投资银行项目、分布式计算项目工作经验,IBM开发者论坛专家作者。一名IT技术狂热爱好者,一名顽强到底的工程师。推崇技术创新、思维创新,对于新技术非常的热爱,致力于技术研发、研究,通过发布文章、书籍、互动活动的形式积极推广软件技术。欢迎添加作者微信“michael_tec”,共同探讨IT技术话题。
本书主要提供Java性能调优方面的参考建议及经验交流。作者力求做到知识的综合传播,而不是仅仅只针对Java虚拟机调优进行讲解,另外力求每一章节都有实际的案例支撑。具体包括:性能优化策略、程序编写及硬件服务器的基础知识、Java API优化建议、算法类程序的优化建议、并行计算优化建议、Java程序性能监控及检测、JVM原理知识、其他相关优化知识等。
通读本书后,读者可以深入了解Java性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。
总的来说,性能调优在很大程度上是一门艺术,解决的Java性能问题越多,技艺才会越精湛。我们不仅要关心JVM的持续演进,也要积极地去了解底层的硬件平台和操作系统的进步。
通读本书后,读者可以深入了解Java性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。
总的来说,性能调优在很大程度上是一门艺术,解决的Java性能问题越多,技艺才会越精湛。我们不仅要关心JVM的持续演进,也要积极地去了解底层的硬件平台和操作系统的进步。
比价列表
1人想要
公众号、微信群
缺书网
微信公众号
微信公众号
扫码进群
实时获取购书优惠
实时获取购书优惠