Java虛擬機學習 – 內存調優 – JAVA編程語言程序開發技術文章

JVM調優主要是針對內存管理方面的調優,包括控制各個代的大小,GC策略。由於GC開始垃圾回收時會掛起應用線程,嚴重影響瞭性能,調優的目是為瞭盡量降低GC所導致的應用線程暫停時間、 減少Full GC次數。
代大小調優
最關鍵參數:-Xms、 -Xmx 、-Xmn 、-XX:SurvivorRatio、-XX:MaxTenuringThreshold、-XX:PermSize、-XX:MaxPermSize
-Xms、 -Xmx 通常設置為相同的值,避免運行時要不斷擴展JVM內存,這個值決定瞭JVM heap所能使用的最大內存。
-Xmn 決定瞭新生代空間的大小,新生代Eden、S0、S1三個區域的比率可以通過-XX:SurvivorRatio來控制(假如值為 4  表示:Eden:S0:S1 = 4:3:3 )
-XX:MaxTenuringThreshold 控制對象在經過多少次minor GC之後進入老年代,此參數隻有在Serial 串行GC時有效。
-XX:PermSize、-XX:MaxPermSize 用來控制方法區的大小,通常設置為相同的值。
1.避免新生代大小設置過小
當新生代設置過小時,會產生兩種比較明顯的現象,一是minor GC次數頻繁,二是可能導致 minor GC對象直接進入老年代。當老年代內存不足時,會觸發Full GC。
2.避免新生代設置過大
新生代設置過大,會帶來兩個問題:一是老年大變小,可能導致Full  GC頻繁執行;二是 minor GC 執行回收的時間大幅度增加。
3.避免Survivor區過大或過小
-XX:SurvivorRatio參數的值越大,就意味著Eden區域變大,minor GC次數會降低,但兩塊Survivor區域變小,如果超過Survivor區域內存大小的對象在minor GC後仍沒被回收,則會直接進入老年代,
-XX:SurvivorRatio參數值設置過小,就意味著Eden區域變小,minor GC觸發次數會增加,Survivor區域變大,意味著可以存儲更多在minor GC後任存活的對象,避免其進入老年代。
4.合理設置對象在新生代存活的周期
新生代存活周期的值決定瞭新生代對象在經過多少次Minor GC後進入老年代。因此這個值要根據自己的應用來調優,Jvm參數上這個值對應的為-XX:MaxTenuringThreshold,默認值為15次。
GC調優
1.GC搭配
參見另一遍垃圾收集器
2.查看JVM參數
命令行工具   可視化工具
3.GC日志參數
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:c:\java\gc.log

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。