面试鸭 Java 后端面试题, JVM 的垃圾回收是如何进行的?
面试鸭 Java 后端面试题, JVM 的垃圾回收是如何进行的?
QA
Step 1
Q:: JVM 的垃圾回收是如何进行的?
A:: JVM 的垃圾回收(Garbage Collection,简称 GC)机制是通过自动管理内存来优化应用程序的性能。GC 主要通过以下几个步骤进行:1. 标记阶段:标记所有存活的对象。2. 清除阶段:清除不再使用的对象,释放内存。3. 压缩阶段:将存活的对象移动到一起,避免内存碎片。常见的 GC 算法包括:标记-清除算法(Mark-Sweep)、复制算法(Copying)、标记-压缩算法(Mark-
Compact)和分代收集算法(Generational Collecting)。JVM 使用分代收集算法,将堆内存分为新生代(Young Generation)和老年代(Old Generation),并针对不同的代采用不同的回收算法,以提高垃圾回收的效率。
Step 2
Q:: 什么是 JVM 的分代收集算法?
A:: JVM 的分代收集算法(Generational Collecting)是基于对象生命周期特点的垃圾回收机制。它将堆内存划分为新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent Generation)。新生代主要存放新创建的对象,分为 Eden 区和两个 Survivor 区。对象在新生代经过多次回收仍存活的,会被移动到老年代。永久代用于存放类的元数据。分代收集算法利用了大多数对象存活时间短的特点,对不同代的内存采用不同的回收策略,以提高回收效率。
Step 3
Q:: Java 中的强引用、软引用、弱引用和虚引用有什么区别?
A:: Java 提供了四种引用类型,用于管理对象的生命周期:1. 强引用(Strong Reference):默认引用类型,只要强引用存在,垃圾回收器永远不会回收被引用的对象。2. 软引用(Soft Reference):当内存不足时,垃圾回收器会回收软引用指向的对象,常用于实现内存敏感的缓存。3. 弱引用(Weak Reference):垃圾回收器发现弱引用时,不论内存是否充足,都会回收其指向的对象,常用于实现规范映射。4.
虚引用(Phantom Reference):最弱的引用类型,虚引用对象的回收不受引用影响,主要用于跟踪对象被垃圾回收的状态。