程序员社区

(JVM面试题)谈谈你知道的垃圾回收算法

判断对象是否可回收的算法有两种:

  • Reference Counting GC,引用计数算法
  • Tracing GC,可达性分析算法

JVM 各厂商基本都是用的 Tracing GC 实现

大部分垃圾收集器遵从了分代收集(Generational Collection)理论。
针对新生代与老年代回收垃圾内存的特点,提出了 3 种不同的算法:

1、标记-清除算法(Mark-Sweep)
标记需回收对象,统一回收;或标记存活对象,回收未标记对象。
缺点:

  • 大量对象需要标记与清除时,效率不高
  • 标记、清除产生的大量不连续内存碎片,导致无法分配大对象

2、标记-复制算法(Mark-Copy)
可用内存等分两块,使用其中一块 A,用完将存活的对象复制到另外一块 B,一次性清空 A,然后改分配新对象到 B,如此循环。
缺点:

  • 不适合大量对象不可回收的情况,换句话说就是仅适合大量对象可回收,少量对象需复制的区域
  • 只能使用内存容量的一半,浪费较多内存空间

3、标记-整理算法(Mark-Compact)
标记存活的对象,统一移到内存区域的一边,清空占用内存边界以外的内存。
缺点:

  • 移动大量存活对象并更新引用,需暂停程序运行

Java面试题

赞(0) 打赏
未经允许不得转载:IDEA激活码 » (JVM面试题)谈谈你知道的垃圾回收算法

一个分享Java & Python知识的社区