希望我讲明白了G1 GC的过程
生活随笔
收集整理的這篇文章主要介紹了
希望我讲明白了G1 GC的过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、回收流程圖:
?二、四個回收流程詳解:
1、Young GC
- 當Eden區用盡時開始年輕代回收過程;
- G1的年輕代收集階段是一個并行(多個垃圾線程)的獨占式收集器;
- 在年輕代回收期,G1 GC暫停所有應用程序線程,啟動多線程執行年輕代回收;
- 從年輕代區間移動存活對象到Survivor區間或者老年區間,也有可能是兩個區間都會涉及。
2、Concurrent Marking
- 當堆內存使用達到一定值(默認45%)時,開始老年代并發標記過程
- 并發標記的五個階段
????????初始標記階段
????????????????標記從根節點直接可達的對象。這個階段是STW的,并且會觸發一次Young GC
? ? ? ?根區域掃描
????????????????G1 GC掃描Survivor區“直接可達的老年代區域對象”,并標記被引用的對象。這一過程必須在young GC之前完成
? ? ? 并發標記
????????????????在整個堆中進行并發標記(和應用程序并發執行),此過程可能被young GC中斷。在并發標記階段,若發現區域對象中的所有對象都是垃圾,那這個區域會被立即回收。同時,并發標記過程中,會計算每個區域的對象活性(區域中存活對象的比例)。
? ? ? 再次標記
????????????????由于應用程序持續進行,需要修正上一次的標記結果,是STW的
? ? ?獨占清理
????????????????計算各個區域的存活對象和GC回收比例,并進行排序,識別可以混合回收的區域,是STW的。
3、Mixed GC
- 標記完成馬上開始混合回收過程。
- 混合回收的回收集包括八分之一的老年代Region,Eden區Region,Survivor區Region
- 由于老年代中的Region默認分8次回收,G1會優先回收垃圾多的內存分段,垃圾占內存分段比例越高的,越會被先回收。
- -XX:G1MixedGCLiveThresholdPercent閾值會決定Region是否被回收,默認為65%,意思是垃圾占內存分段比例要達到65%才會被回收。
- -XX :G1HeapWastePercent閾值決定混合回收要不要進行8次,默認值為10%,如果發現可以回收的垃圾占堆內存的比例低于10%,則不再進行混合回收
4、Full GC
- 如果上述方式不能正常工作,G1會停止應用程序的執行(Stop-The-World) ,使用單線程的內存回收算法進行垃圾回收
- 無法找到可用的空閑分區或者分配巨型對象無法在老年代找到連續足夠的分區的時候,G1首先會嘗試擴展堆大小(堆大小還未達到-Xmx),如果擴展失敗,那么發生full GC
總結
以上是生活随笔為你收集整理的希望我讲明白了G1 GC的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物理学习:6招帮你搞定高中物理考试的计算
- 下一篇: 【七】springboot整合redis