年轻代分三个区。一个 Eden 区,和两个 Survivor 区。
大部分对象在 Eden 区中生成。
当 Eden 区满时,存活的对象将被复制到 Survivor 区(两个中的一个)。
当这个 Survivor 区满时,此区的存活对象将被复制到另外一个 Survivor 区。
当这个 Survivor 区也满了的时候,从第一个 Survivor 区复制过来的,并且此时还存活的对象,将被复制“年老区”。
两个 Survivor 区总有一个是空的。
根据程序需要,Survivor 区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。
那么为什么要减少对象放到老年代的可能呢?
因为在年轻代中触发的是 minor gc 而在老年代中触发的是 full gc,我们知道 minor gc 对性能的影响,相对于 full gc 来讲,是很小的。