老年代因为每次只会说少量对象,因此采用Mark-Compact算法。
1、Java虚拟机提到过的处于方法区的永生代(Permanent Generation),它用来存储class类,常量,方法描述等。对永生代的回收主要包括废弃常量和无用的类。
2、对象的内存分配主要在新生代的Eden Space和Survivor Space的From Space(Survivor目前存放对象的那一块),少数情况会直接分配到老年代。
3、当新生的Eden Space和From Space空间不足时就会发生一次GC,进行GC后,Eden Space和From Space区的存活对象会被挪到To Space,然后将Eden Space和From Space进行清理。
4、如果To Space无法足够存储某个对象,则将这个对象存储到老年代。
5、在进行GC后,使用的便是Eden Space和To Space了,如此反复循环。
6、当对象在Survivor区躲过一次GC后,其年龄就会+1,默认情况下年龄达到15的对象会被移到老年代中。