当前主流 VM 垃圾收集都采用”分代收集”(GenerationalCollection)算法, 这种算法会根据对象存活周期的不同将内存划分为几块, 如 JVM 中的 新生代老年代永久代,这样就可以根据各年代特点分别采用最适当的 GC 算法

  1. 在新生代-复制算法
    每次垃圾收集都能发现大批对象已死, 只有少量存活. 因此选用复制算法, 只需要付出少量存活对象的复制成本就可以完成收集.
  2. 在老年代-标记整理算法
    因为对象存活率高、没有额外空间对它进行分配担保, 就必须采用“标记—清理”或“标记—整理”算法来进行回收, 不必进行内存复制, 且直接腾出空闲内存.