當年輕代滿時就會觸發Minor GC,這裏的年輕代滿指的是 Eden 代滿,Survivor 滿不會引起 GC。java
年老代滿時會引起 Full GC,Full GC 將會同時回收年輕代、年老代,數組
當永久代滿時也會引起 Full GC,會致使 Class、Method 元信息的卸載。學習
大多數狀況下,對象在新生代 Eden 區中分配。當 Eden 區沒有足夠的空間進行分配時,虛擬機將發起一次 Minor GC。spa
大對象指的是須要大量連續內存空間的 Java 對象,如很長的字符串及數組。code
常常出現大對象容易致使內存還有很多空間時就提早觸發垃圾收集以獲取足夠的連續空間來 」安置「 它們。對象
爲了識別哪些對象應當放在新生代,哪些對象應放在老年代,虛擬機給每一個對象定義了一個對象年齡(Age)計數器。若是對象在 Eden 出生並通過第一次 Minor GC 後仍然存活,而且能被 Survivor 容納的話,將被移動到 Survivor 空間中,並將對象年齡設爲 1。對象在 Survivor 區中每熬過一次 Minor GC,年齡就增長 1 歲,當它的年齡增長到必定程度(默認爲 15 歲)時,就會被晉升到老年代。對象晉升到老年代的年齡閾值,能夠經過參數 -XX:MaxTenuringThreshold
來設置。內存
若是在 Survivor 空間中相同年齡全部對象大小的總和大於 Survivor 空間的一半,年齡大於或等於該年齡的對象就能夠直接進入老年代,無須等到 MaxTenuringThreshold 中要求的年齡。字符串