cms (concurrent mark sweep) 基於標記-清除 算法實現的。獲取最短停頓時間的收集器算法
一。主要步驟:併發
1. 初始化標記 ( inittial mark) :須要stop world線程
僅標記gc root(系統類加載器,線程棧對象,本地棧對象等) 能夠直接關聯到的對象,因爲只會標記第一層,因此很快對象
2.併發標記 (concureny mark): 耗時最長內存
與應用線程同時執行,不須要 stop world,根據1的結果,標記所有對象rem
3.從新標記(remark):須要stop worldit
標記 併發標記過程當中因爲用戶運行而產生變化的對象,耗時較短gc
4.併發清除cpu
二。缺點cms
1. cpu敏感
2. 沒法處理浮動垃圾(cms運行階段內存沒法知足用戶線程的須要:1 老年代申請內存過快,2.新生代過來的對象過多,),致使full gc,則使用SerialOld作後備收集器
3.基於 標記-清除算法實現,會產生過多的垃圾碎片,解決方案:fullGC 進行碎片壓縮