JVM垃圾收集器
參考:《實戰Java虛擬機》
1 垃圾回收器:串行回收器
特點:串行、獨佔
適用於單核處理器的服務器,Client模式(現在基本都是Server模式)默認使用的垃圾收集器。多核下就不推薦使用了。
回收算法:新生代複製算法,老年代標記壓縮
用法:
-XX:+UseSerialGC 新生代,老年代都用串行回收器
-XX:+UseParNewGC 新生代ParNew回收器,老年代串行回收器
-XX:+UseParallelGC 新生代Parallel回收器,老年代串行回收器
2 垃圾回收器:並行回收器之ParNew
特點:多線程、獨佔
在多核處理器下,性能優於串行處理器,但單核下還不如串行處理器(Serial)
回收算法:標記壓縮
用法:
-XX:+UseParNewGC 新生代ParNew回收器,老年代串行回收器
-XX:+UseConcMarkSweepGC 新生代ParNew回收器,老年代CMS
-XX:ParallelGCThreads 回收器線程數量(cpu <= 8) cpu個 : (3 + (5*cpu)/8)
3 垃圾回收器:並行回收器之ParallelGC
特點:多線程、獨佔、關注系統吞吐量(即關注垃圾回收總時間)
並行,關注系統吞吐量
回收算法:複製
用法:
-XX:+UseParallelGC 新生代Parallel回收器,老年代串行回收器
-XX:+UseParallelGC 新生代Parallel回收器,老年代ParallelOld回收器
-XX:MaxGCPauseMillis 垃圾收集最大停頓時間,設置的小,會導致回收次數變多,垃圾回收總時間變大(吞吐量下降)
-XX:GCTimeRatio 吞吐量大小(0~100),作用與上面的相反,設置的越大,回收次數越小。
-XX:+UseAdaptiveSizePolicy 可設置自適應GC策略,系統自動找最大停頓時間與吞吐量的平衡值(真方便,萌新用起來真好)
4 垃圾回收器:並行回收器之CMS
cms分爲多個階段回收,把標記跟清除的階段分離出來,降低STW的時間(可見初始標記、重新標記是會造成STW)
特點:多線程、並行(只有初始/重新標記 纔是串行)
並行,關注最小停頓時間
回收算法:標記清除
用法:
-XX:+UseConcMarkSweepGC 新生代ParNew回收器,老年代CMS
-XX:CMSInitiatingOccupancyFraction 默認68,表示老年代空間使用率=68%時進行CMS回收(設置過小會頻繁回收)
-XX:+CMSClassUnloadingEnabled 可添加這個參數,cms就會回收perm區的class數據
注意點:因爲CMS採用標記清除算法,所以會導致大量內存碎片,CMS解決的辦法是回收幾次後統一處理這些碎片。
5 垃圾回收器:並行回收器之G1
多線程、併發的分代回收器,目標是替代CMS,可用於新生代和老年代。相對於CMS,G1處理每次回收都能有效複製對象,減少內存碎片。並且只選取部分進行回收,縮小回收範圍,降低全局停頓帶來的影響。並採用混合回收,優先回收垃圾比例較高的區域。
特點:多線程、並行(只有初始/重新標記 纔是串行)
並行,關注最小停頓時間
回收算法:標記清除
用法:
-XX:+UseG1GC 新生代G1回收器,老年代G1
6 線程本地分配緩存TLAB
TLAB本身佔用了eden區空間,用於給對應線程分配內存。目的就是爲了加速對象分配,對象分配順序如下:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.