JVM垃圾回收算法全解析

45 阅读2分钟

JVM垃圾回收算法全解析

JVM垃圾回收算法全解析

参考:Java 八股/JVM有哪些垃圾回收算法?

参考:gitee.com/wtfocus/gee…

回答

一、标记-清除 算法

image-20250329104542545

  • 工作原理

    1. 对对象集合,进行一个标记。把可达对象和不可达对象区分开。
    2. 然后,对不可达对象进行一个清除操作。
  • 优点

    • 速度快,因为不需要移动和复制对象
  • 缺点

    • 会产生内存碎片,造成内存的浪费
二、标记-复制 算法

image-20250329104604824

  • 工作原理
    1. 主要应用在 Young 区。
    2. 通过把 eden 和 其中的一个存活区 S0,把它们中少量的存活对象复制到另一个存活区 S1。
    3. 然后,把 eden 和 S0 这两个区域直接清空掉。
    4. 如果,有发现有存活对象超过了我们设置的阈值,就直接把它们晋升到老年代。
    5. 后面,就依次循环运行。
  • 优点
    • 内存空间是连续的,不会产生内存碎片
  • 缺点
    1. 浪费内存空间
    2. 复制对象会造成性能和时间上的消耗
三、标记-整理 算法

image-20250329104625677

  • 工作原理

    1. 第一阶段:标记

      与"标记-清除"算法一样。

      对对象集合,进行一个标记。把可达对象和不可达对象区分开。

      然后,对不可达对象进行一个清除操作。

    2. 第二阶段:整理

      把清除不可达对象后,剩下的所有碎片给整理好。

      形成一整片连续可用的空余的内存。

  • 优点

    1. 不会产生内存碎片
    2. 不会浪费内存空间
  • 缺点

    1. 太耗时间(性能低)
小结
  1. 单从时间长短来看:标记-清除 < 标记-复制 < 标记-整理。

  2. 单从结果来看:标记-整理 > 标记-复制 >= 标记-清除