5.分代收集下的年轻代和老年代应该采用什么样的垃圾回收算法?

1、年轻代(Young Generation)的回收算法(主要以 Copying 为主)

  1. 所有新⽣成的对象⾸先都是放在年轻代的。年轻代的⽬标就是尽可能快速的收集掉那些⽣命周期短的对象。

  2. 新⽣代内存按照 8:1:1 的⽐例分为⼀个 eden 区和两个 survivor(survivor0、 survivor1)区。⼤部分对象在Eden 区中⽣成。回收时先将 Eden 区存活对象复制到⼀个 survivor0 区,然后清空 eden 区,当这个survivor0 区也存放满了时,则将 eden 区和 survivor0 区存活对象复制到另⼀个 survivor1 区,然后清空eden 区 和这个 survivor0 区,此时 survivor0 区是空的,然后将survivor0 区和 survivor1 区交换,即保持survivor1 区为空, 如此往复。

  3. 当 survivor1 区不⾜以存放 Eden 区 和 survivor0区 的存活对象时,就将存活对象直接存放到⽼年代。若是⽼年代也满了就会触发⼀次Full GC(Major GC),也就是新⽣代、⽼年代都进⾏回收。

  4. 新⽣代发⽣的 GC 也叫做 Minor GC,MinorGC 发⽣频率⽐较⾼(不⼀定等 Eden 区满了才触发)。

 

2、年⽼代(Old Generation)的回收算法(主要以 Mark-Compact 为主)

  1. 在年轻代中经历了 N 次垃圾回收后仍然存活的对象,就会被放到年⽼代中。因此,可以认为年⽼代中存放的 都是⼀些⽣命周期较⻓的对象。

  2. 内存⽐新⽣代也⼤很多(⼤概⽐例是1 : 2),当⽼年代内存满时触发 Major GC 即 Full GC,Full GC 发⽣频率 ⽐较低,⽼年代对象存活时间⽐较⻓,存活率标记⾼。

posted @ 2021-08-11 09:39  RainsX  阅读(604)  评论(0)    收藏  举报