Minor GC
JVM堆內(nèi)存被分為兩部分:年輕代(Young Generation)和老年代(Old Generation)温数。
1.年輕代
年輕代是所有新對(duì)象產(chǎn)生的地方绣硝。當(dāng)年輕代內(nèi)存空間被用完時(shí),就會(huì)觸發(fā)垃圾回收撑刺。這個(gè)垃圾回收叫做Minor GC域那。年輕代被分為3個(gè)部分——Enden區(qū)和兩個(gè)Survivor區(qū)。
年輕代空間的要點(diǎn):
- 大多數(shù)新建的對(duì)象都位于Eden區(qū)猜煮。
- 當(dāng)Eden區(qū)被對(duì)象填滿時(shí)次员,就會(huì)執(zhí)行Minor GC。并把所有存活下來(lái)的對(duì)象轉(zhuǎn)移到其中一個(gè)survivor區(qū)王带。
- Minor GC同樣會(huì)檢查存活下來(lái)的對(duì)象淑蔚,并把它們轉(zhuǎn)移到另一個(gè)survivor區(qū)。這樣在一段時(shí)間內(nèi)愕撰,總會(huì)有一個(gè)空的survivor區(qū)刹衫。
- 經(jīng)過(guò)多次GC周期后,仍然存活下來(lái)的對(duì)象會(huì)被轉(zhuǎn)移到年老代內(nèi)存空間搞挣。通常這是在年輕代有資格提升到年老代前通過(guò)設(shè)定年齡閾值來(lái)完成的带迟。
2.年老代
年老代內(nèi)存里包含了長(zhǎng)期存活的對(duì)象和經(jīng)過(guò)多次Minor GC后依然存活下來(lái)的對(duì)象。通常會(huì)在老年代內(nèi)存被占滿時(shí)進(jìn)行垃圾回收囱桨。
Major GC
老年代的垃圾收集叫做Major GC仓犬,Major GC通常是跟full GC是等價(jià)的,收集整個(gè)GC堆舍肠。
Minor GC和Major GC其實(shí)就是年輕代GC和年老年GC的俗稱(chēng)搀继。而在Hotspot VM具體實(shí)現(xiàn)的收集器:Serial GC, Parallel GC, CMS, G1 GC中,大致可以對(duì)應(yīng)到某個(gè)Young GC和Old GC算法組合翠语。
分代GC
針對(duì)HotSpot VM的實(shí)現(xiàn)叽躯,其實(shí)GC的準(zhǔn)確分類(lèi)可以分為:
- 分代GC
- Full GC
以及后續(xù)的G1的分區(qū)收集本質(zhì)其實(shí)還是一個(gè)分代收集器,但是和之前的各類(lèi)回收器不同肌括,它同時(shí)兼顧年輕代和老年代点骑。
分代GC并不收集整個(gè)GC堆的模式,而是只專(zhuān)注分代收集
- Young GC:只收集年輕代的GC
- Old GC:只收集年老代的GC(只有CMS的concurrent collection是這個(gè)模式)
- Mixed GC:收集整個(gè)young gen以及部分old gen的GC(只有G1有這個(gè)模式)
Full GC
Full GC定義是相對(duì)明確的谍夭,就是針對(duì)整個(gè)新生代黑滴、老生代、元空間(metaspace慧库,java8以上版本取代perm gen)的全局范圍的GC跷跪。