Minor GC發生在年輕代,頻率較高速度較快數組
Major GC 是清理永久代安全
Full GC 是清理整個堆空間,包括年輕代和永久代對象
通常新生成的對象都出如今Eden區,當Eden區被填滿時,全部通過垃圾回收還存活的對象被複制到兩個Survivor區域中的一個,咱們假定是From區(兩個區域實際上沒有任何區別,From和To只是爲了更好的說明工做流程),當From區域也被填滿時,這個區域通過垃圾回收仍存活的對象將會被複制進入To區域,原From區域被清空,而且從Eden區過來的數據將直接進入To區域。當To區域也被填滿時,以前從From區域過來的那部分數據若是仍在活動,將會被放到老年代。須要注意的是,兩個Survivor區域總有一個會是空的。字符串
經過年齡計數器。對象每通過了一個GC仍然存活,年齡計數器加一。當年齡超過了設定的值;則將其經過擔保機制轉移到老年代。或者動態斷定,當survivor中年齡相同的多個對象的總和超過了survivor的一半,則將年齡大於等於該年齡的對象轉移到老年代,無需等待設置的最大年齡值。年齡大的對象直接進入老年代。工作流
在Minr GC 以前,首先會檢查老年代的可以使用空間是否大於年輕代的對象的總和,若大於則是一次安全的GC。若不大於且是否容許擔保失敗設置爲TRUE,則計算曆次晉升到老年的對象的平均大小是否大於老年代的最大可用空間,若大於則進行一次冒險的Minor GC,由於有可能老年代不能知足空間的需求,則進行一次Full GC; 若不大於且是否容許擔保失敗設置爲FALSE,則進行一次Full GC,讓老年代騰出更多的空間。之因此存在Min GC是由於年輕代每次只使用一個survivor保存仍然存活的對象。垃圾回收
同時,若是在一次安全的minor GC 的時候,仍然存活的對象不能在另外一個survivor中所有容納,會經過擔保機制直接進入老年代。可是Full GC 與 Minor GC 相比,比較耗時。老年代的對象: 1.大對象(字符串與數組),即超過了設定的值的對象,直接在老年代中分配; 2.長期存活的對象進入老年代數據