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