MST

星途 面试题库

面试题:Java垃圾回收机制之常见垃圾回收算法

请简要介绍Java垃圾回收机制中,标记 - 清除算法、标记 - 整理算法和复制算法的工作原理,以及它们各自的优缺点。
38.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

标记 - 清除算法

  1. 工作原理
    • 标记阶段:从根对象(如栈中的引用、静态变量等)开始遍历,标记所有被引用的对象。
    • 清除阶段:遍历堆内存,回收所有未被标记的对象,即垃圾对象。
  2. 优点
    • 实现简单,不需要额外的空间。
  3. 缺点
    • 效率问题:标记和清除过程的效率不高,尤其是在大规模对象的情况下。
    • 空间问题:会产生大量不连续的内存碎片,导致后续大对象分配可能因无法找到连续内存空间而提前触发垃圾回收。

标记 - 整理算法

  1. 工作原理
    • 标记阶段:同标记 - 清除算法,从根对象开始标记所有被引用的对象。
    • 整理阶段:将所有存活的对象向内存的一端移动,然后直接清除边界以外的内存。
  2. 优点
    • 解决了标记 - 清除算法产生内存碎片的问题,使得后续内存分配更高效。
  3. 缺点
    • 整理过程需要移动对象,涉及到对象地址的改变,效率相对较低,尤其是在对象数量较多的情况下。

复制算法

  1. 工作原理
    • 将内存分为大小相等的两块,每次只使用其中一块。当这一块内存用完时,将存活的对象复制到另一块,然后清除当前使用的这块内存。
  2. 优点
    • 效率高,每次只需要清理一块内存,并且不存在内存碎片问题。
    • 实现简单,只需进行对象复制操作。
  3. 缺点
    • 内存利用率低,因为始终有一半的内存处于空闲状态,在对象存活率较高时,复制操作频繁且成本高。