Java 面试题
目录

Java 虚拟机 (JVM) 中有哪些垃圾回收算法?

· 约 3 分钟读完 · 第 123 / 274 章

推荐答案

在 Java 虚拟机 (JVM) 中,常见的垃圾回收算法包括:

  1. 标记-清除算法 (Mark-Sweep)
  2. 复制算法 (Copying)
  3. 标记-整理算法 (Mark-Compact)
  4. 分代收集算法 (Generational Collection)
  5. 增量收集算法 (Incremental Collection)
  6. 并行收集算法 (Parallel Collection)
  7. 并发收集算法 (Concurrent Collection)

本题详细解读

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

  • 工作原理:首先标记出所有需要回收的对象,然后统一回收所有被标记的对象。
  • 优点:实现简单。
  • 缺点:会产生内存碎片,影响内存分配效率。

2. 复制算法 (Copying)

  • 工作原理:将内存分为两块,每次只使用其中一块。当这一块内存用完后,将存活的对象复制到另一块内存中,然后清除已使用的内存块。
  • 优点:不会产生内存碎片。
  • 缺点:内存利用率低,需要额外的内存空间。

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

  • 工作原理:首先标记出所有需要回收的对象,然后将存活的对象向内存的一端移动,最后清理掉边界以外的内存。
  • 优点:不会产生内存碎片。
  • 缺点:移动对象的开销较大。

4. 分代收集算法 (Generational Collection)

  • 工作原理:将内存分为不同的代(如新生代和老年代),根据对象的存活周期采用不同的垃圾回收算法。
  • 优点:针对不同代采用不同的回收策略,提高回收效率。
  • 缺点:实现复杂。

5. 增量收集算法 (Incremental Collection)

  • 工作原理:将垃圾回收过程分成多个小步骤,每次只回收一部分垃圾,减少单次回收的停顿时间。
  • 优点:减少垃圾回收的停顿时间。
  • 缺点:总体回收时间可能增加。

6. 并行收集算法 (Parallel Collection)

  • 工作原理:使用多个线程并行执行垃圾回收任务。
  • 优点:提高垃圾回收效率。
  • 缺点:需要多核CPU支持。

7. 并发收集算法 (Concurrent Collection)

  • 工作原理:垃圾回收线程与用户线程并发执行,减少停顿时间。
  • 优点:减少垃圾回收的停顿时间。
  • 缺点:实现复杂,可能影响系统吞吐量。

这些垃圾回收算法各有优缺点,JVM 通常会根据应用场景和需求选择合适的算法或组合使用多种算法来优化垃圾回收性能。