JVM总结(三)Minor GC、Major GC和Full GC
Java與C++之間有一堵由內(nèi)存動(dòng)態(tài)分配和垃圾收集技術(shù)所圍成的“高墻”,墻外面的人想進(jìn)去,墻里面的人卻想出來(lái)。
一、Minor GC
Minor GC,比如當(dāng) Eden 區(qū)滿了。
GC之后,就會(huì)晉升到老年代(當(dāng)然并不是所有的對(duì)象都是這樣晉升的到老年代的),當(dāng)老年代滿了,就會(huì)報(bào)OutofMemory異常。
二、Major GC vs Full GC
在目前的項(xiàng)目中還沒有明確的定義,這點(diǎn)需要注意。JVM規(guī)范和垃圾收集研究論文都沒有提及,但是乍一看,這些建立在我們掌握了Minor GC清理新生代上的定義并非難事:
- Major GC清理Tenured區(qū)(老年代)。
- Full GC清理整個(gè)heap區(qū),包括Yong區(qū)和Tenured區(qū)。
Full GC觸發(fā)條件
(1)調(diào)用System.gc時(shí),系統(tǒng)建議執(zhí)行Full GC,但是不必然執(zhí)行
(2)老年代空間不足
(3)方法去空間不足
(4)通過(guò)Minor GC后進(jìn)入老年代的平均大小 > 老年代的可用內(nèi)存
(5)由Eden區(qū)、From Space區(qū)向To Space區(qū)復(fù)制時(shí),對(duì)象大小大于To Space可用內(nèi)存,則把該對(duì)象轉(zhuǎn)存到老年代,且老年代的可用內(nèi)存小于該對(duì)象大小。即老年代無(wú)法存放下新年代過(guò)度到老年代的對(duì)象的時(shí)候,會(huì)觸發(fā)Full GC。
補(bǔ)充
以上的GC總結(jié),只是在非并發(fā)GC的觸發(fā)條件下的大致原理。真正的GC情況跟實(shí)際GC器的回收機(jī)制有關(guān)。不同的GC器對(duì)Major GC 和 Full GC 的機(jī)制還是有區(qū)別的。如JVM中Serial GC, Parallel GC, CMS, G1 GC。會(huì)在后續(xù)的總結(jié)中去總結(jié)。
總結(jié)
以上是生活随笔為你收集整理的JVM总结(三)Minor GC、Major GC和Full GC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深圳中学因招聘上热搜:名校博士挤破头想进
- 下一篇: oracle 追究,ORACLE事件跟踪