前面介紹了回收觸發的時機和各類收集器。如何選擇各類收集類,下面是5個參考標準:
- 優先調整堆的大小讓服務器自己來選擇
- 如果內存小於100M,使用串行收集器
- 如果是單核,並且沒有停頓時間的要求,串行或JVM自己選擇
- 如果允許停頓時間超過1秒,選擇並行或者JVM自己選
- 如果響應時間最重要,並且不能超過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%的垃圾回收時間,太嚴苛會直接影響到吞吐量