1、對象優先在Eden分配
大多數情況下,對象在新生代Eden區中分配。當Eden區沒有足夠的空間進行分配時,虛擬機將發起一次MinorGC。
MinorGC和FullGC的區別:
新生代GC(MinorGC):指發生在新生代的垃圾收集動作,因為Java對象大多都具備朝生夕滅的特性,所以MinorGC非常頻繁,一般回收速度也比較快。
老年代GC(Major / FullGC):指發生在老年代的GC,出現了MajorGC,經常會伴隨至少一次的MinorGC。MajorGC的速度一般會比MinorGC慢10倍以上。
2、大對象直接進入老年代
所謂的大對象是指,需要大量連續內存空間的Java對象,最典型的大對象就是那種很長的字符以及數組。
3、長期存活的對象將進入老年代
虛擬機采用了分代收集的思想來管理內存,那么內存回收時就必須能識別哪些對象應放在新生代,哪些對象應放在老年代。為了做到這點,虛擬機給么個對象定義了一個對象年齡(Age)計數器。如果對象在Eden出生并經過第一次MinorGC后仍然存活,并且能被Survivor容納的話,將被移動到Survivor空間中,并且對象年齡設為1。對象在Survivor區中每熬過一次MinorGC,年齡就增加1歲,當它的年齡增加到一定程度(默認為15歲),就將會被晉升到老年代中。