Java程序性能优化 让你的Java程序更快、更稳定-笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章 java 性能调优概述
1.1.2 性能的参考指标
1.2.1 设计调优
比如说如果A组件通过循环不断监控时间E是否发生,其必然会占用部分系统资源。但是可以通过observer模式解决:
1.2.2 代码调优
比如linkedList比ArrayList 随机访问性能好。
1.2.3 JVM调优
一般在开发后期做,比如内存结构,GC种类。
1.2.4 数据库调优
比如大量的拥有相同结构的SQL查询,可以用preparedStatement代替statement;指定要查询的列名,避免用“*”。
比如设置oracle的共享池、缓存区。
1 .2.5 操作系统调优
比如调整unix的共享内存值。
第二章设计优化
2.1 设计模式
2.1.1 单例模式
对于频繁使用对象,因为new次数少,对内存使用不频繁,将减轻GC压力。
2.1.2 代理模式
可以实现比如延迟加载
2.1.3 享元模式
好处同单例模式
2.1.5 观察者模式
可以代替多线程。
2.1.6 Value Object
一次封装所有的属性值,省得一次次请求属性值。
2.1.7 Business Delegate
代理类中一组远程方法调用构成一个业务流程,客户端调用代理类。
2.2 常用优化组件
2.2.1 缓冲
缓冲是一块内存区域,目的是缓解应用程序上下层之间的性能差异。
2.2.2 缓存
也是一块内存区域,目的是暂存数据处理结构,并供下次访问使用。
也可用ehCache等框架
2.2.3 对象复用池
比如线程池和数据库连接池
2.2.4 多线程
2.2.5 负载均衡
2.2.6 时间换空间
比如少申请变量
2.2.7 空间换时间
比如用缓存
第三章 java 程序优化
3.3 使用NIO提升性能
NIO为所有的原始类型提供buffer,NIO是基于Block的,NIO最重要的组件是buffer和Channel。 buffer是一个连续的内存快,是NIO读写数据的中转池。通道表示缓冲数据的源头或者目的地,它是用于想缓存读取或写入数据,是访问缓冲的接口。
3.4 使用软引用和弱引用
3.5 有利于改善性能的技巧
3.5.1 慎用异常
3.5.2 使用局部变量,因为局部变量是在stack中,比较快。
3.5.3 位运算代替乘除法
3.5.12 静态方法代替实例方法
第四章并行程序优化
4.5 锁的优化
4.5.7 ReentrantLock 重入锁
4.5.9 自旋锁
4.5.10 锁清除
java即时编译时,上下文扫描,去除不可能存在共享资源竞争的锁,这样可以节省毫无意义的请求锁时间
4.5.11 锁偏向(biased)
4.6 无锁
例如TreadLocal,和 CAS算法(Compare and Swap)。
4.6.3 Amino
是apache的项目,提供了一些线程安全的、基于无锁算法的数据结构例如lockFreeList.还内置了一些多线程调度模式(例如Master-Worker模式)。
4.7 协程
第五章 JVM调优
5.3.10 CMS(Concurrent Mark Sweep)收集器,用标记-清除算法,同时使用多线程。
5.3.10 G1收集器,在吞吐量和停顿控制上好于CMS.
5.4 常用调优方法
5.4.1 把新对象留在新生代。
5.4.2 长命的大对象进入老年代,免得新生代老GC
5.4.4 稳定堆大小
5.4.5 并行收集器适合吞吐量优先,可以减少GC的总时间。
5.4.7 降低停顿,可以用CMS 收集器和尽可能把对象预留在新生代。
5.5 实用JVM参数
5.5.1 JIT
5.5.4 打印GC +PrintGC
5.5.5 类和对象跟踪
总结
第六章 java性能调优工具6.1 linux 命令
Nmon Axis里看见各种性能6.3 JDK命令行