《java程序性能优化——让你的java程序更快、更稳定》
第1章 java性能调优概述 1
1.1 性能概述 1
1.1.1 看懂程序的性能 1
1.1.2 性能的参考指标 2
1.1.3 木桶原理与性能瓶颈 2
1.1.4 amdahl定律 3
1.2 性能调优的层次 5
1.2.1 设计调优 5
1.2.2 代码调优 5
1.2.3 jvm调优 6
1.2.4 数据库调优 6
1.2.5 操作系统调优 6
1.3 基本调优策略和手段 7
1.3.1 优化的一般步骤 7
1.3.2 系统优化注意事项 8
1.4 小结 8
第2章 设计优化 10
2.1 善用设计模式 10
2.1.1 单例模式 10
.2.1.2 代理模式 15
2.1.3 享元模式 24
2.1.4 装饰者模式 27
2.1.5 观察者模式 33
2.1.6 value object模式 37
2.1.7 业务代理模式 40
2.2 常用优化组件和方法 43
2.2.1 缓冲(buffer) 43
2.2.2 缓存(cache) 46
2.2.3 对象复用——“池” 50
2.2.4 并行替代串行 56
2.2.5 负载均衡 56
2.2.6 时间换空间 62
2.2.7 空间换时间 63
2.3 小结 65
第3章 java程序优化 66
3.1 字符串优化处理 66
3.1.1 string对象及其特点 66
3.1.2 substring()方法的内存泄漏 68
3.1.3 字符串分割和查找 71
3.1.4 stringbuffer和stringbuilder 74
3.2 核心数据结构 79
3.2.1 list接口 79
3.2.2 map接口 86
3.2.3 set接口 97
3.2.4 优化集合访问代码 99
3.2.5 randomaccess接口 101
3.3 使用nio提升性能 102
3.3.1 nio的buffer类族和channel 103
3.3.2 buffer的基本原理 104
3.3.3 buffer的相关操作 107
3.3.4 mappedbytebuffer性能评估 114
3.3.5 直接内存访问 116
3.4 引用类型 118
3.4.1 强引用 119
3.4.2 软引用 120
3.4.3 弱引用 121
3.4.4 虚引用 122
3.4.5 weakhashmap类及其实现 125
3.5 有助于改善性能的技巧 127
3.5.1 慎用异常 127
3.5.2 使用局部变量 128
3.5.3 位运算代替乘除法 128
3.5.4 替换switch 129
3.5.5 一维数组代替二维数组 130
3.5.6 提取表达式 131
3.5.7 展开循环 132
3.5.8 布尔运算代替位运算 133
3.5.9 使用arraycopy () 134
3.5.10 使用buffer进行i/o操作 135
3.5.11 使用clone()代替new 137
3.5.12 静态方法替代实例方法 139
3.6 小结 140
第4章 并行程序开发及优化 141
4.1 并行程序设计模式 141
4.1.1 future模式 141
4.1.2 master-worker模式 148
4.1.3 guarded suspension模式 153
4.1.4 不变模式 160
4.1.5 生产者-消费者模式 162
4.2 jdk多任务执行框架 166
4.2.1 无限制线程的缺陷 166
4.2.2 简单的线程池实现 167
4.2.3 executor框架 171
4.2.4 自定义线程池 173
4.2.5 优化线程池大小 177
4.2.6 扩展threadpoolexecutor 178
4.3 jdk并发数据结构 179
4.3.1 并发list 179
4.3.2 并发set 182
4.3.3 并发map 182
4.3.4 并发queue 183
4.3.5 并发deque 186
4.4 并发控制方法 187
4.4.1 java内存模型与volatile 187
4.4.2 同步关键字synchronized 190
4.4.3 reentrantlock重入锁 192
4.4.4 readwritelock读写锁 195
4.4.5 condition对象 196
4.4.6 semaphore信号量 198
4.4.7 threadlocal线程局部变量 200
4.5 “锁”的性能和优化 201
4.5.1 线程的开销 201
4.5.2 避免死锁 202
4.5.3 减小锁持有时间 206
4.5.4 减小锁粒度 207
4.5.5 读写分离锁来替换独占锁 208
4.5.6 锁分离 209
4.5.7 重入锁(reentrantlock)和内部锁(synchronized) 210
4.5.8 锁粗化(lock coarsening) 211
4.5.9 自旋锁(spinning lock) 212
4.5.10 锁消除(lock elimination) 212
4.5.11 锁偏向(biased lock) 214
4.6 无锁的并行计算 214
4.6.1 非阻塞的同步/无锁 214
4.6.2 原子操作 215
4.6.3 amino框架介绍 217
4.6.4 amino集合 218
4.6.5 amino树 222
4.6.6 amino图 222
4.6.7 amino简单调度模式 223
4.7 协程 226
4.7.1 协程的概念 226
4.7.2 kilim框架简介 226
4.7.3 task及其状态 227
4.7.4 fiber及其状态 228
4.7.5 kilim开发环境配置 228
4.7.6 kilim之hello world 230
4.7.7 多任务通信 232
4.7.8 kilim实例及性能评估 233
4.8 小结 236
第5章 jvm调优 237
5.1 java虚拟机内存模型 237
5.1.1 程序计数器 237
5.1.2 java虚拟机栈 238
5.1.3 本地方法栈 243
5.1.4 java堆 244
5.1.5 方法区 245
5.2 jvm内存分配参数 249
5.2.1 设置最大堆内存 249
5.2.2 设置最小堆内存 250
5.2.3 设置新生代 251
5.2.4 设置持久代 252
5.2.5 设置线程桟 253
5.2.6 堆的比例分配 254
5.2.7 堆分配参数总结 256
5.3 垃圾收集基础 257
5.3.1 垃圾收集的作用 257
5.3.2 垃圾回收算法与思想 258
5.3.3 垃圾收集器的类型 262
5.3.4 评价gc策略的指标 263
5.3.5 新生代串行收集器 264
5.3.6 老年代串行收集器 265
5.3.7 并行收集器 265
5.3.8 新生代并行回收(parallel scavenge)收集器 266
5.3.9 老年代并行回收收集器 267
5.3.10 cms收集器 267
5.3.11 g1收集器(garbage first) 270
5.3.12 stop the world案例 270
5.3.13 收集器对系统性能的影响 272
5.3.14 gc相关参数总结 273
5.4 常用调优案例和方法 275
5.4.1 将新对象预留在新生代 275
5.4.2 大对象进入老年代 278
5.4.3 设置对象进入老年代的年龄 279
5.4.4 稳定与震荡的堆大小 280
5.4.5 吞吐量优先案例 281
5.4.6 使用大页案例 282
5.4.7 降低停顿案例 282
5.5 实用jvm参数 283
5.5.1 jit编译参数 283
5.5.2 堆快照(堆dump) 284
5.5.3 错误处理 285
5.5.4 取得gc信息 285
5.5.5 类和对象跟踪 287
5.5.6 控制gc 288
5.5.7 选择类校验器 289
5.5.8 solaris下线程控制 289
5.5.9 使用大页 289
5.5.10 压缩指针 289
5.6 实战jvm调优 290
5.6.1 tomcat简介与启动加速 290
5.6.2 web应用程序介绍 292
5.6.3 jmeter介绍与使用 293
5.6.4 调优前web应用运行状况 296
5.6.5 调优过程 297
5.7 总结 298
第6章 java性能调优工具 299
6.1 linux命令行工具 299
6.1.1 top命令 299
6.1.2 sar命令 301
6.1.3 vmstat命令 302
6.1.4 iostat命令 304
6.1.5 pidstat工具 305
6.2 windows工具 309
6.2.1 任务管理器 309
6.2.2 perfmon性能监控工具 311
6.2.3 process explorer 313
6.2.4 pslist命令行 315
6.3 jdk命令行工具 317
6.3.1 jps命令 317
6.3.2 jstat命令 318
6.3.3 jinfo命令 322
6.3.4 jmap命令 323
6.3.5 jhat命令 324
6.3.6 jstack命令 326
6.3.7 jstatd命令 329
6.3.8 hprof工具 330
6.4 jconsole工具 332
6.4.1 jconsole连接java程序 332
6.4.2 java程序概况 333
6.4.3 内存监控 333
6.4.4 线程监控 335
6.4.5 类加载情况 335
6.4.6 虚拟机信息 336
6.4.7 mbean管理 337
6.4.8 使用插件 338
6.5 visual vm多合一工具 339
6.5.1 visual vm连接应用程序 339
6.5.2 监控应用程序概况 342
6.5.3 thread dump和分析 343
6.5.4 性能分析 344
6.5.5 快照 346
6.5.6 内存快照分析 347
6.5.7 mbean管理 349
6.5.8 tda使用 349
6.5.9 btrace介绍 350
6.6 visual vm对oql的支持 356
6.6.1 visual vm的oql基本语法 356
6.6.2 内置heap对象 357
6.6.3 对象函数 359
6.6.4 集合/统计函数 362
6.6.5 程序化oql 366
6.7 mat内存分析工具 368
6.7.1 初识mat 368
6.7.2 浅堆和深堆 371
6.7.3 支配树(dominator tree) 374
6.7.4 垃圾回收根 375
6.7.5 内存泄露检测 376
6.7.6 最大对象报告 378
6.7.7 查找支配者 378
6.7.8 线程分析 379
6.7.9 集合使用情况分析 380
6.7.10 扩展mat 381
6.8 mat对oql的支持 385
6.8.1 select子句 385
6.8.2 from子句 387
6.8.3 where子句 389
6.8.4 内置对象与方法 389
6.9 jprofile简介 393
6.9.1 jprofile使用配置 393
6.9.2 内存视图 394
6.9.3 堆快照 394
6.9.4 cpu视图 395
6.9.5 线程视图 397
6.9.6 jvm统计信息 397
6.9.7 触发器 398
6.10 小结 400
- 浏览: 387801 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Nabulio:
写的详细,特殊语法学习到了
jdk1.5-1.9新特性 -
wooddawn:
您好,最近在做个足球数据库系统,用到了betbrain的数据表 ...
javascript深入理解js闭包 -
lwpan:
很受启发 update也可以
mysql 的delete from 子查询限制 -
wuliaolll:
不错,总算找到原因了
mysql 的delete from 子查询限制
发表评论
-
将json格式的字符数组转为List对象
2015-08-10 15:18 899使用的是json-lib.jar包 将json格式的字符数组 ... -
用httpPost对JSON发送和接收的例子
2015-08-10 11:16 1096HTTPPost发送JSON: private static ... -
zookeeper适用场景:zookeeper解决了哪些问题
2015-07-31 18:01 752问题导读: 1.master挂机 ... -
java泛型
2015-07-29 10:48 762什么是泛型? 泛型(Ge ... -
Java线程Dump分析工具--jstack
2015-06-23 11:09 710jstack用于打印出给定的java进程ID或core fil ... -
什么是spark?
2015-04-10 09:37 485关于Spark: Spark是UC Berkeley AM ... -
dubbo 教程
2015-04-09 19:21 771先给出阿里巴巴dubbo的 ... -
jre/bin目录下面工具说明
2015-03-20 16:45 634jre/bin目录下面工具说明 ... -
JVM系列三:JVM参数设置、分析
2015-01-30 11:18 692不管是YGC还 ... -
jstat使用
2015-01-27 11:11 674jstat 1. jstat -gc pid ... -
查看java堆栈情况(cpu占用过高)
2015-01-27 11:10 7361. 确定占用cpu高的线程id: 方法一: 直接使用 ps ... -
慎用ArrayList的contains方法,使用HashSet的contains方法代替
2015-01-20 14:14 1141在启动一个应用的时候,发现其中有一处数据加载要数分钟,刚开始 ... -
Java虚拟机工作原理详解
2015-01-16 10:00 716一、类加载器首先来 ... -
jdk1.5-1.9新特性
2014-11-11 10:22 83091.51.自动装箱与拆箱:2.枚举(常用来设计单例模式 ... -
java动态代理(JDK和cglib)
2014-09-24 15:51 471JAVA的动态代理 代理模式 代理模式是常用的java设计 ... -
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
2014-09-24 15:45 691class文件简介及加载 Java编译器编译 ... -
怎么用github下载资源
2014-09-24 11:18 4501、下载github:到http://windows. ... -
maven项目时jar包没有到lib目录下
2014-09-01 20:05 2550在建项目时路径都设置好了,为什么在eclipse中运行mav ... -
使用并行计算大幅提升递归算法效率
2014-08-27 15:04 603前言: 无论什么样的 ... -
JAVA 实现FTP
2014-08-22 14:41 701一个JAVA 实现FTP功能的代码,包括了服务器的设置模块, ...
相关推荐
Java程序性能优化是每个开发人员都需要关注的重要领域,它涵盖了多个方面,旨在提高代码执行效率,减少资源消耗,...通过阅读"Java程序性能优化 让你的Java程序更快、更稳定.pdf",你将获得更详尽的指导和实践案例。
Java程序性能优化——让你的Java程序更快、更稳定
总的来说,“Java程序性能优化 让你的Java程序更快、更稳定”这本书将涵盖以上诸多方面,通过理论结合实际的示例代码,帮助读者深入理解Java性能优化的各个方面,从而写出更快、更稳定的Java程序。书中附带的源文件...
Java程序性能优化——让你的Java程序更快、更稳定
由于上传限制大小,附件pdf由Java程序性能优化 让你的Java程序更快、更稳定.pdf 和Java程序性能优化 让你的Java程序更快、更稳定.z01组成,下载下来解压到同一个目录即可
《java程序性能优化——让你的java程序更快、更稳定》共6章,先后从软件设计、软件编码、jvm调优以及程序故障排除等方面介绍针对java程序的优化方法。第1章介绍性能的基本概念、定律、系统调优的过程和注意事项;第2...
在本资源中,我们主要探讨的是“Java程序设计——基于JDK 6和NetBeans实现”的主题。这是一份与书本配套的源代码,旨在帮助读者深入理解Java编程,并通过实际操作提升技能。让我们详细地了解这个主题涵盖的知识点。 ...
在Java的三大平台中——Java SE(标准版)、Java EE(企业版)以及Java ME(微小版),Java Web开发主要关注的是Java EE。Java EE为Web应用提供了丰富的服务和API,包括但不限于Web容器、Servlet、JSP、EJB(企业级...
它去除了C++中的复杂特性,如指针、运算符重载等,这使得Java更易于理解和使用。 - **面向对象**:Java是一种完全面向对象的语言,支持封装、继承和多态三大特性,这有助于提高代码的复用性和扩展性。 ##### 4. ...
【Java程序设计】是计算机科学领域中一门重要的编程语言课程,尤其对于初学者而言,它提供了进入软件开发世界的入口。龚炳江教授的《java程序设计》是人民邮电出版社出版的一本高质量教材,旨在帮助读者掌握Java语言...
随着 Java Servlet 的推出,Java在电子商务方面开始崭露头角,最新的Java Server Page(JSP)技术的推出,更是让Java 成为了基于Web应用程序的首选开发工具。 Java是第一套允许使用者将应用程序通过 Internet 从远...
《JBuilder 9程序设计——Java程序员成功之路》是一本专为Java开发者设计的指南,尤其对于使用JBuilder 9这一强大的集成开发环境(IDE)的用户来说,它提供了全面而深入的学习路径。JBuilder是Borland公司推出的一款...
包括《Java语言程序设计:基础篇》、《Java编程思想》、《JAVA核心技术卷I:基础知识》以及《JAVA核心技术卷II:高级特性》等,这些教材均为Java程序设计领域的重要参考资料,通过阅读这些材料,学生可以更深入地理解和...
标题"smali2java——直接将smali转换成java"揭示了本文的核心主题,即一个名为"smali2java"的工具,它的主要功能是将编程语言Smali转换为Java。Smali是一种低级的、汇编式的语言,通常用于Android应用的逆向工程,而...
《Java语言程序设计(一)》是自考Java专业的一门重要课程,旨在帮助学习者掌握Java编程的基础知识和技能。这门课程涵盖了Java语言...同时,不断关注Java的新特性和最佳实践,能够让你在这个快速发展的领域保持竞争力。
Java线程是Java编程中一个强大且必要的特性,它极大地扩展了Java程序的能力范围,使其能够处理更复杂、更高效的并发任务。然而,线程的管理和使用也需要谨慎,避免常见的并发问题,确保程序的稳定性和安全性。通过...
Java之——类热加载 在Java编程中,类的加载是程序运行的重要环节。传统的Java应用程序在启动时,由JVM(Java虚拟机)通过类加载器将类加载到...然而,正确理解和合理使用热加载技术,也是确保程序稳定运行的关键。
4. **UDP协议**:相较于TCP,UDP是无连接、不可靠的传输协议,但其速度更快,适合于对实时性要求较高的应用场景,如在线聊天。Java的DatagramSocket和DatagramPacket类用于实现UDP通信。 5. **文件I/O操作**:在...