回覆列表
  • 1 # 此生唯一

    面試中經常被問到CMS和G1垃圾收集器,故來總結下!

    CMS收集器:concurrent mark and sweep,併發標記和清除,追求最少的時間停留的收集器!

    CMS執行收集步驟:

    1,初始標記:快速標記GC roots能直接關聯到的物件,速度快;需要STW(stop the world)

    2,併發標記:進行GC Roots Tracing;(時間長,但是可以和使用者執行緒並行執行)

    3,重新標記:標記併發標記期間,使用者程式繼續執行而導致的標記變化(stop the world)

    4,併發清除:並行執行垃圾清除,這一步也會產生浮動垃圾;(時間長,但是可以和使用者執行緒並行執行)

    優點:併發執行效率好,停頓時間短;

    缺點:

    1,併發清除的時候產生浮動垃圾;

    2,標記-清除演算法,產生大量的記憶體碎片,很容易引發full gc;

    3,預設啟用的處理執行緒數為(CPU的個數+3)/4,即至少使用25%的CPU,多的話會是100%;

    CMS主要針對老年代的垃圾收集,通常和ParNewGC(新生代收集)一起使用;

    G1:將整個堆記憶體分為大小相等的多個獨立region區,保留新生代,老年代概念,卻沒有做物理隔離,G1記錄每個region中的物件活性,根據使用者設定的停頓時間,選擇活性更低的region進行回收,這樣能降低停頓時間;

    G1新生代收集:新生代達到比例的時候進行收集,根據統計資訊動態調整Eden和Survivor的大小,合理利用記憶體;

    G1老年代收集:

    1,初始標記:跟CMS類似

    2,併發標記:跟CMS類似

    3,最終標記:跟CMS類似

    4,篩選回收:對所有region中的回收成本進行排序,同時根據使用者設定的停頓時間來指定回收計劃,併發清除物件(stop the world)

    G1優點:

    1,停頓時間可預測:根據使用者設定的停頓時間進行stop the world和gc;

    2,region的回收具有優先順序:物件收集更有效率和針對性;

    3,標記-整理演算法:不再有記憶體碎片產生;

    下個帖子將會詳細講一下jvm中的相關內容,需要的朋友一定要關注哦。。

相關內容

  • 中秋節和大豐收的關聯?
  • 2歲半寶寶坐車,坐飛機能吃什麼比較好?