Java虛擬機器學習 - 記憶體調優

hleloword發表於2015-04-01

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


             本文原文連結:http://blog.csdn.net/java2000_wl/article/details/8090940 轉載請註明出處!

相關文章