1.Minor GC和Full GC
2.對象優先放到Eden中
3.大對象放到老年代中
4.老對象放到老年代中
5.記憶體配置設定擔保
1.Minor GC和Full GC
Minor GC:發生在新生代的垃圾回收。
Full GC:發生在老年代的垃圾回收。
Full GC的時間大概在Minor GC的10倍以上
2.對象優先放到Eden中
前文說過,新生代會使用複制算法,而虛拟機是采用8:1:1來配置新生代的記憶體空間的。8的那一份叫Eden,兩個1的都叫survivor。對于Eden中的對象,進行Minor GC之後,活下來的會進入survivor中。
當new了一個對象,這個對象會被優先放到Eden中,隻有經曆過最少一次的Minor GC,才會進入survivor中
3.大對象放到老年代中
所謂大對象,就是那種連續占用很大記憶體空間的對象,這種對象會直接進入老年代
4.老對象放到老年代中
(1).什麼叫老對象?由2知道,每次Minor GC後,survivor中對象都可能會發生變化。一個對象經曆一次Minor GC沒死,就會加一歲,當它年滿15歲,就會被認為是老對象,進入老年代。
(2).上面是固定的形成老對象的方法,成為老對象還有一種方法:當survivor中某一年紀的對象占記憶體空間的總和大于總survivor空間的一半時,這個年紀及以上年紀的對象會被認為是老對象進而被放到老年代
5.記憶體配置設定擔保
因為新生代使用的是複制算法,存活的對象是放在survivor中的,當某一次存活的對象超過survivor記憶體時,此時會看老年代。老年代根據情況看看要不要進行記憶體配置設定擔保(可以認為是銀行的貸款)
(1).當新生代的對象記憶體總和小于老年代的最大連續空閑記憶體時,這是安全的。
(2).當老年代的最大連續空閑記憶體時大于新生代平均晉升到老年代的大小,這是有風險的,但是還是會執行。
(3).萬一哪一次,新生代晉升到老年代的大小超過了老年代最大連續空閑記憶體,那麼就會進行一次Full GC