老年代因为每次只回收少量对象,因而采用Mark-Compact算法。
- Java虚拟机提到过的处于方法区的永久代(Permanet Generation),它用来存储class类,常量,方法描述等。对永生代的回收主要包括废弃常量和无用的类。
- 对象的内存分配主要在新生代的Eden Space和From Survivor,少数情况会直接分配到老年代。
- 当新生代的Eden Space和From Survivor空间不足时就会发生一次GC,进行GC后,Eden Space和From Survivor区的存活对象会被复制到To Survivor,然后将Eden Space和From Survivor进行清空。
- 如果To Survivor无法足够存储某个对象,则将这个对象存储到老年代。
- 在进行GC后,使用的便是Eden Space和To Survivor了,如此反复。
- 当对象在Survivor区躲过一次GC后,其年龄就会+1。默认情况下年龄到达15,对象会被移到老年代。
注意:本文归作者所有,未经作者允许,不得转载