面試中經常被問到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中的相關內容,需要的朋友一定要關注哦。。
面試中經常被問到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中的相關內容,需要的朋友一定要關注哦。。