MST

星途 面试题库

面试题:Java垃圾回收算法之中等难度:标记 - 清除算法的优缺点

请详细阐述Java垃圾回收算法中标记 - 清除算法的工作原理,并分析其主要的优点和缺点。
29.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

标记 - 清除算法工作原理

  1. 标记阶段:垃圾回收器从根对象(例如栈中的引用、静态变量等)开始遍历所有对象,标记所有可以被访问到的对象,这些对象是存活的。而没有被标记的对象则被认定为是垃圾对象,即不可达对象。
  2. 清除阶段:在标记完成后,垃圾回收器会遍历整个堆内存,回收所有没有被标记的垃圾对象所占用的内存空间,将这些内存空间标记为可用。

优点

  1. 实现简单:不需要进行对象移动等复杂操作,只需要进行标记和清除两个简单的步骤,实现相对容易,对垃圾回收器的实现要求较低。
  2. 灵活性高:适用于各种不同的对象布局和内存管理场景,不需要依赖特定的对象排列方式或内存结构。

缺点

  1. 产生内存碎片:在清除垃圾对象后,堆内存中会出现大量不连续的空闲内存块,即内存碎片。随着程序的运行,分配大对象时可能因为无法找到足够连续的内存空间而提前触发垃圾回收,影响程序性能。
  2. 空间和时间效率低:标记和清除过程都需要遍历整个堆内存,时间复杂度较高。而且由于存在内存碎片,可能导致实际可利用的内存空间小于堆内存的物理大小,空间利用率较低。