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()