JVM的垃圾收集算法

86 阅读1分钟

标记-清理算法

  1. 分为标记和清理两个阶段
  2. 标记出所有需要回收的对象
  3. 标记完毕后统一进行回收所有被标记的对象
  • 效率问题

  • 空间问题

      产生大量的不连续空间碎片
    

复制算法 (效率高)

  1. 将内存划分为大小相同的两块,每次只使用其中一块
  2. 当这块内存使用完成后,将存活对象,复制到另一块内存中,一次性清理这块内存。
  3. 这样每次清理内存都是对一半内存空间的回收

标记-整理算法

  1. 分为标记和整理两个阶段
  2. 标记出所有需要回收的对象
  3. 将所有存活的对象向一端移动
  4. 一次性清理端边界以外的内存

根据收集算法的使用场景

代划分

  • 为什么要划分新生代和老年代

    • 提高GC收集效率
  • 分代垃圾收集算法

    • 新生代

    1. 场景: 每次收集都会有大量对象死去,垃圾收集比较频频繁

    2. 算法: 复制算法

    3. 每次只需要付出少量的对象复制成本就可以完成垃圾收集

    • 老年代

    1. 场景: 对象存活机率比较高
    2. 算法:
      • 标记-清理
      • 标记-整理