概述
分代垃圾回收并不是一个新的算法, 而是将之前的回收算法结合利用, 分场景使用.
简单来说, 分代垃圾回收的思路, 就是给每个对象都分配一个年龄, 年龄越大的, 活的越久, 被回收的概率就越小....分代垃圾回收就是利用这个现象, 将堆分为了新生代和老年代, 新生代的对象大部分会马上变成垃圾, 而新生代经历过几次回收后, 对象就会晋升到老年代中. 老年代中的对象不会经常回收....然后, 就可以针对不同分代, 利用针对性的GC算法.
实现
还记得之前的标记复制算法么? 将堆进行二等分. 在分代回收中, 也将堆进行分块, 分为新生代堆以及老年代堆....针对新生代: 利用复制算法, 避免了内存碎片化, 同时分配内存更快速(因为新生代就是会频繁的申请内存). 同时将年龄大的对象加到老年代中....使得其吞吐量得到改善.对回收频繁的内存, 使用复制算法 速度快、内存分配也高效.
但是, 如果有的程序并并不符合年纪轻轻就死掉的规则, 一个程序的大部分对象都能够活很久, 那就适得其反了.