JVM调优案例05
1.由安全点导致长时间停顿
1.1) 问题
一HBase集群垃圾回收时间常常在3秒以上
1.2) 原因
HBase的RPC Server的Listener线程执行到了一个连接超时清理函数的可数循环里,因为是int 索引,HotSpot没有设置安全点,导致GC时,必须等待所有循环都跑完才能进入到安全点,表现为长时间的停顿
1.3) 解决
把循环索引的数据类型从int修改为Long,作为不可数循环设置安全点,不用等待所有循环都跑完就鞥进行垃圾回收
1.4) 其他
三个时间概念
==user: 进程执行用户态代码所花费的处理器时间
==sys: 进程执行核心态代码所花费的处理器时间
== real: 执行动作从开始到结束时所花费的时钟时间
2. Eclipse运行速度调优
2.1) 概述
使用作者自行编写的Eclipse的插件,获取到Eclipse的启动时间是15秒,GC耗时4秒多,加载类也是4秒多即时编译约2秒
2.2) 升级JDK版本的性能变化和兼容问题
==问题
升级JDK5到JDK6后Eclipse报OOM
==原因
使用VisualVM 查看,原来是默认的永久代的空间大小为64MB,太小了,所以发生了OOM
==解决
手动设置永久代的空间大小为250MB
2.3) 编译时间和类加载时间的优化
JDK6取消字节码校验启动时间比JDK5稍快
HotSpot的2个编译器
JIT编译
即时编译
2.4)调整内存设置控制垃圾收集频率
把新生代铜梁提升到128MB避免动态内存扩展
屏蔽系统的显性垃圾回收System.gc()
网友评论