深入JVM內核—原理與優化之gc參數學習

堆:
新生代+老年代;
新生代(Eden+s0+s1);

串行回收器算法:
最古老、最穩定、效率高;
可能會有較長時間的停頓;
-XX:UserSerialGC
- 新生代、老年代使用串行回收;
-新生代複製算法;
-老年代標記-壓縮;

並行收集器:
ParNew收集器
-XX:+UseParNewGC
新生代並行;
老年代串行;
- Serial收集器新生代的並行版本
- 複製算法
- 多線程,需要多和支持
- -XX:ParallelGCThreads 限制線程數量

Parallel收集器
類似ParNew;
新生代複製算法,老年代標記壓縮算法;
更加關注吞吐量;
-XX:+UseParallelGC
使用Parallel收集器+老年代串行
-XX:+UserParallelOldGC
使用Parallel收集器+並行老年代
參數:
-XX:MaxGCPauseMills
最大停頓時間,單位秒;
-XX:GCTimeRatio
垃圾收集時間佔比;
兩個值是矛盾的;停頓時間和吞吐量之間的調優;

CMS收集器
併發 標記清除算法;
與標記-壓縮相比;
併發階段會降低吞吐量;(應用程序的線程資源會被GC線程佔用掉一部分)
老年代收集器(新生代使用ParNew);
-XX:+UserConcMarkSweepGC
過程比較複雜,着重實現標記:
初始標記(STW):只標記根對象的可達對象,快
*併發標記(和用戶線程一起);主要標記過程,標記全部對象;
重新標記(STW);工作量小,併發標記的補充;
併發清除(和用戶線程一起);清除不壓縮;
特點:
儘可能降低停頓
會影響系統整體的吞吐量和性能;
清理不徹底;
和用戶線程一起執行,不能再空間快滿時再清理;
concurrent mode failure; (使用串行)
-XX:+UseCMSCompactAtFullCollection, Full GC後進行一次整理;
-XX:+CMSFullGCsBeforeCompaction,幾次GC後進行一次碎片整理
-XX:ParallelCMSThreads,設定CMS的線程數量

爲減輕GC壓力,需要注意:
軟件設計架構
代碼如何寫
堆空間如何分配:
發佈了64 篇原創文章 · 獲贊 45 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章