分4个区:Eden区(80%) S1(10%) S2(10%) 和老年区(S1和S2轮流作为from和to)
流程:
1.新生的对象先进入Eden,eden区满了后会触发GC,仍存活的会进入S1,此时S1初始化标记为From,S2则视为To
2.此后每当,Eden满了触发GC时,就会把Eden和From中仍存活的对象采用“标记-复制”算法移动到To区域,并且释放自身内存的对象,此时这些对象的年龄+1(即经历了一次GC就+1),然后此时的To标记为From,From标记为To,这样子,每次To都是空的,然后From装载着多次GC后仍然存活的对象(假设Survivor+Eden中存活下来的内存超过了10%,则需要将一部分对象分配到老年代,否则交给To装不下)
3.经过多次GC和survivor区的from-to转移,有些对象的年龄会超过某个阈值(如15)就会放入老年代,因为老年代的对象都很稳定,变化不大,所以采用“标记-整理方法”,把死去的对象去除,活下来的向前对齐