1. 程式人生 > >JVM垃圾收集器(三) —— 老年代垃圾收集器

JVM垃圾收集器(三) —— 老年代垃圾收集器

上一篇文章講了新生代的垃圾收集器,這篇文章我們來講講老年代的垃圾收集器

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高階特性與最佳實踐》