首頁>Club>
13
回覆列表
  • 1 # 使用者8130071835312

    CMS收集器是一種以獲取最短回收停頓時間為目標的收集器。基於“標記-清除”演算法實現,它的運作過程如下:

    1)初始標記 2)併發標記 3)重新標記 4)併發清除

    初始標記、從新標記這兩個步驟仍然需要“stop the world”,初始標記僅僅只是標記一下GC Roots能直接關聯到的物件,熟讀很快,併發標記階段就是進行GC Roots Tracing,而重新標記階段則是為了修正併發標記期間因使用者程式繼續運作而導致標記產生表動的那一部分物件的標記記錄,這個階段的停頓時間一般會比初始標記階段稍長點,但遠比並發標記的時間短。

    優點:併發收集、低停頓。

    缺點:

    1)CMS收集器對CPU資源非常敏感。在併發階段,它雖然不會導致使用者執行緒停頓,但是會因為佔用了一部分執行緒而導致應用程式變慢,總吞吐量會降低。

    2)CMS收集器無法處理浮動垃圾,可能會出現“Concurrent Mode Failure(併發模式故障)”失敗而導致Full GC產生。

    3)CMS是一款“標記--清除”演算法實現的收集器,容易出現大量空間碎片。當空間碎片過多,將會給大物件分配帶來很大的麻煩,往往會出現老年代還有很大空間剩餘,但是無法找到足夠大的連續空間來分配當前物件,不得不提前觸發一次Full GC。

    2、G1收集器

    G1是一款面向服務端應用的垃圾收集器。G1具備如下特點:

    1、並行於併發:G1能充分利用CPU、多核環境下的硬體優勢,使用多個CPU(CPU或者CPU核心)來縮短stop-The-World停頓時間。部分其他收集器原本需要停頓Java執行緒執行的GC動作,G1收集器仍然可以透過併發的方式讓java程式繼續執行。

    2、分代收集:雖然G1可以不需要其他收集器配合就能獨立管理整個GC堆,但是還是保留了分代的概念。它能夠採用不同的方式去處理新建立的物件和已經存活了一段時間,熬過多次GC的舊物件以獲取更好的收集效果。

    3、空間整合:與CMS的“標記--清理”演算法不同,G1從整體來看是基於“標記整理”演算法實現的收集器;從區域性上來看是基於“複製”演算法實現的。

    4、可預測的停頓:這是G1相對於CMS的另一個大優勢,降低停頓時間是G1和CMS共同的關注點,但G1除了追求低停頓外,還能建立可預測的停頓時間模型,能讓使用者明確指定在一個長度為M毫秒的時間片段內,

    5、G1運作步驟:

    1、初始標記;2、併發標記;3、最終標記;4、篩選回收

    上面幾個步驟的運作過程和CMS有很多相似之處。

    初始標記階段僅僅只是標記一下GC Roots能直接關聯到的物件,並且修改TAMS的值,讓下一個階段使用者程式併發執行時,能在正確可用的Region中建立新物件,這一階段需要停頓執行緒,但是耗時很短,

    併發標記階段是從GC Root開始對堆中物件進行可達性分析,找出存活的物件,這階段時耗時較長,但可與使用者程式併發執行。

    最終標記階段則是為了修正在併發標記期間因使用者程式繼續運作而導致標記產生變動的那一部分標記記錄,虛擬機器將這段時間物件變化記錄線上程Remenbered Set Logs裡面,最終標記階段需要把Remembered Set Logs的資料合併到Remembered Set Logs裡面,最終標記階段需要把Remembered Set Logs的資料合併到Remembered Set中,這一階段需要停頓執行緒,但是可並行執行。

    最後在篩選回收階段首先對各個Region的回收價值和成本進行排序,根據使用者所期望的GC停頓時間來制定回收計劃。

  • 中秋節和大豐收的關聯?
  • 思皓x8質量可靠嗎?