CMS(Concurrent-Mark_Sweep)垃圾回收器的工作原理
阿新 • • 發佈:2020-10-22
CMS(Concurrent-Mark_Sweep)垃圾回收器的工作原理
簡介:
對於許多應用程式而言,在程式執行時的吞吐量不如快速響應時間那麼重要,尤其是在網際網路站或者B/S系統的服務端,這類應用尤其使用者的體驗感,中間出現停頓的時間越短越好,CMS垃圾收集器應運而生,它在JDK1.5時作為HotSpot JVM的一個預設的內建垃圾收集器。
CMS的特點是低延遲,很適合於與使用者互動的應用。這款垃圾收集器是一第一款真正意義上的併發垃圾回收器,它使用的是標記-清除演算法,所以也會有"stop the world"時間,但是時間會很短。
工作流程
初始標記:
初始標記時要停止所有使用者的執行緒,會進入"stop the world"時間,這時僅僅標記與GCRoots直接相連的物件(假設為集合A),所以初始標記的時間會很短。
併發標記:
此時標記的是與集合A直接或間接相連的物件(假設為集合B),躍然併發標記的時間較長,時長大約比初始標記大一個數量級,但是,此時是與使用者程式併發執行的,並不會出現"stop the world"情況。
重新標記:
因併發標記時使用者的執行緒還在執行,此時會產生新的連線物件(假設為集合C),重新標記就是標記集合C的物件。那麼為了防止重新標記過程產生新的物件,所以此時要停止所有使用者的執行緒,從而進入"stop the world"時間,此過程的用時也很短。
併發清除:
重新標記後,所以確定是垃圾的物件(假設為集合D),隨後垃圾回收器會將集合D清除掉。並不會移動物件,所以此過程是可以和使用者執行緒併發執行的。