JVM垃圾收集器(三) —— 老年代垃圾收集器
阿新 • • 發佈:2018-11-09
上一篇文章講了新生代的垃圾收集器,這篇文章我們來講講老年代的垃圾收集器
Serial Old收集器
1、說明:一個單執行緒收集器,使用“標記-整理”演算法。其實就是Serial收集器老年代的版本
2、優缺點 和 執行圖 和Serial收集器一樣,所以這裡就不多贅述了
Parallel Old收集器
1、說明:Parallel Old是Parallel Scavenge收集器的老年代版本,使用多執行緒和“標記-整理”演算法。
2、在注重吞吐量以及CPU資源敏感的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器
Parallel Scavenge/Parallel Old收集器執行示意如下所示:
CMS收集器
1、說明:CMS(Concurrent Mark Sweep)收集器是一種以獲取 最短回收停頓時間 為目標的收集器。採用的是是基於“標記—清除”演算法實現的。主要是用在網際網路網站或者B/S系統的服務端上。
2、執行步驟:
- 初始標記(CMS initial mark):需要“STW”,僅僅只是標記一下GC Roots能直接關聯到的物件,速度很快;
- 併發標記(CMS concurrent mark):可以併發操作,主要是進行GC ROOT Tracing,有點慢,需要佔用很多CPU資源
- 重新標記(CMS remark):需要“STW”,主要是針對併發標記期間重新進入到老年代的資料,這個階段比初始標記時間長,但是遠比並發標記短
- 併發清除(CMS concurrent sweep):就是清除資料,由於採用的是標記清除的演算法,所以會產生一些碎片
3、優點:優點是併發收集(使用者執行緒可以和GC執行緒同時工作),停頓小
4、缺點:佔用CPU資源;且由於併發清除時時併發的,所以會產生浮動垃圾,只能由下一次的GC進行清除,這個沒辦法
CMS收集器執行示意圖:
本文的內容和圖片參考自:《深入理解Java虛擬機器:JVM高階特性與最佳實踐》