瞎掰JVM:內存結構---垃圾回收(三)

前面介紹了回收觸發的時機和各類收集器。如何選擇各類收集類,下面是5個參考標準:

  1. 優先調整堆的大小讓服務器自己來選擇
  2. 如果內存小於100M,使用串行收集器
  3. 如果是單核,並且沒有停頓時間的要求,串行或JVM自己選擇
  4. 如果允許停頓時間超過1秒,選擇並行或者JVM自己選
  5. 如果響應時間最重要,並且不能超過1秒,使用併發收集器

Parallel和CMS比較:Parallel在併發上有優勢,而CMS在響應時間上有優勢。

CMS和G1比較:一般情況下,堆空間小於4G時,CMS比G1性能好;在大堆或者超大堆上GG1有優勢。

 

關於調優

 

Parallel調優準則:降低GC時間百分比,GC時間百分比和堆大小關係找到一個平衡點。可以使用-XX:GCTimeRatio命令讓虛擬機自行調整堆大小,以達到設置的GC時間百分比。

常見措施:

1.設置Metaspace大小:增大元空間大小-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M

2.添加吞吐量和停頓時間參數:-XX:MaxGCPauseMillis=100 -XX:GCTimeRatio=99

3.修改動態擴容增量:-XX:YoungGenerationSizeIncrement=30

 

CMS調優準則:避免併發失效;

常見措施:

1. 增大老年代空間。

2. 提高後臺回收線程的效率(或者使用更多的線程)。

      2.1給後臺線程更多運行的機會

          -XXCMSInitiatingOccupancyFraction=N

          -XX:+UseCMSInitialingOccupancyOnly

      2.2調整後臺線程數量

          -XX:ConGCThreads=N

 

 

G1 調優準則:在暫停時間和吞吐量之間達到平衡

常見措施:

1. 設置年輕代大小:避免使用-Xmn、-XX:NewRatio等顯示設置Young區大小,會覆蓋暫停時間目標(常用參數3)

2. 暫停時間目標:暫停時間不要太嚴苛,其吞吐量目標是90%的應用程序時間和10%的垃圾回收時間,太嚴苛會直接影響到吞吐量

 

 

 

 

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 1988
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章