【大白话说Java面试题 第55题】【JVM篇】第15题:JVM有哪些垃圾收集算法?

【大白话说Java面试题 第55题】【JVM篇】第15题:JVM有哪些垃圾收集算法? PDF大白话说Java面试题 — 02-JVM篇第15题JVM有哪些垃圾收集算法回答核心概念JVM 的垃圾收集算法是垃圾回收的核心机制决定了如何高效地标记和回收内存中的垃圾对象。常见的垃圾收集算法包括以下三种标记-复制、标记-清除和标记-整理。1. 标记-复制Mark-Copy算法定义将内存划分为两块区域From 和 To每次只使用其中一块。当一块区域的内存用完后垃圾回收器会将存活对象复制到另一块区域然后一次性清理掉已使用的空间。优点高效清理短生命周期的对象避免内存碎片化问题。缺点需要额外的内存空间导致内存利用率较低通常只有 50%。适用场景年轻代中对象大多数是短生命周期的适合使用标记-复制算法。2. 标记-清除Mark-Sweep算法定义先标记所有存活对象然后统一回收未标记的对象即垃圾对象。优点实现简单适合一次性清理大量垃圾对象。缺点容易产生内存碎片影响后续分配大对象的效率。源码解析Serial Old和Parallel Old收集器在老年代中使用了标记-整理算法但基础原理与标记-清除类似。3. 标记-整理Mark-Compact算法定义标记过程与标记-清除相同不同的是标记完成后不会直接回收垃圾对象而是将所有存活对象向一端移动然后清理掉边界以外的空间。优点避免内存碎片化问题适合频繁分配大对象的场景。缺点整理过程需要额外的时间开销性能略低于标记-清除。4. 总结对比算法适用场景优点缺点标记-复制年轻代短生命周期对象高效清理垃圾无内存碎片需要额外的 Survivor 区内存利用率低标记-清除老年代少量垃圾对象实现简单适合一次性清理大量垃圾易产生内存碎片标记-整理老年代频繁分配大对象避免内存碎片适合长期运行的应用整理过程耗时较长面试官视角面试官可能会问“为什么年轻代使用标记-复制算法”答因为年轻代中大多数对象是短生命周期的标记-复制算法能高效清理垃圾且无碎片问题。面试官可能会追问“标记-清除和标记-整理的区别是什么”答标记-清除直接回收垃圾容易产生碎片标记-整理会压缩内存避免碎片但耗时更长。