谈谈你知道的垃圾回收算法


参考答案

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

  • Reference Counting GC,引用计数算法

  • Tracing GC,可达性分析算法

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

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

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

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

  • 大量对象需要标记与清除时,效率不高

  • 标记、清除产生的大量不连续内存碎片,导致无法分配大对象

 

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

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

  • 不适合大量对象不可回收的情况,换句话说就是仅适合大量对象可回收,少量对象需复制的区域

  • 只能使用内存容量的一半,浪费较多内存空间

 

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

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

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

 


微信小程序阅读

刷题面试、行情交流 加好友回 666 入群

  • 基础与语法
    • JDK和JRE有什么区别?