第5章 调优案例分析与实战
5.1 概述
5.2 案例分析
5.2.1 高性能硬件上的程序部署策略
- 如何解决老年代太大? 重启或者定时触发Full GC
- 64位的JDK消耗的内存一般比32位JDK大,这是由于指针膨胀,以及数据类型对齐补白等因素导致
- 64位的JDK的性能测试结果普遍低于32位JDK
- 根据实际情况可以选择对应的垃圾收集器
- 大量的缓存做为集中式部署
5.2.2 集群间同步导致的内存溢出
- 内存经常异常,可以先添加 -XX:+HeapDumpOnOutOfMemroyError参数
- 分析dump文件,定位问题的原因
5.2.3 堆外内存导致的溢出错误
- 由于Direct Memroy内存不会进入堆当中,它只能等待老年代满了之后Full
GC,然后清理掉内存的废弃对象,否则就只能等到内存溢出异常,自己回收
- -XX: MaxDirectMemroySize 调整大小,内存不足时再抛出OOM或OOE异常
5.2.4 外部命令导致系统很慢
- 查看CPU资源消耗情况
- 外部shell脚本调用Runtime.getRuntime().exec()方法,频繁调用会导致CPU和内存的负担很重,因为会clone出来一个进程,结束后再关闭掉
5.2.7
- Java的GUI程序当中一般加入 -Dsun.awt.keepWorkingSetOnMinimize=true
来保证程在恢复最小化时能够立即响应
5.3 实战Eclipse运行速度调优