对垃圾回收算法了解多少

参考答案

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

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

JVM 各厂商基本都是用的 Tracing GC 实现。
大部分垃圾收集器遵从了分代收集(Generational Collection)理论。

针对新生代与老年代回收垃圾内存的特点,提出了 3 种不同的算法:

1、标记-清除算法(Mark-Sweep)

标记需回收对象,统一回收;或标记存活对象,回收未标记对象。有如下缺点:

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

2、标记-复制算法(Mark-Copy)

可用内存等分两块,使用其中一块 A,用完将存活的对象复制到另外一块 B,一次性清空 A,然后改分配新对象到 B,如此循环。有如下缺点:

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

 

3、标记-整理算法(Mark-Compact)

标记存活的对象,统一移到内存区域的一边,清空占用内存边界以外的内存。有如下缺点:

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

 

以上,是JVM面试题【对垃圾回收算法了解多少】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧