Java虚拟机面试题, Java 中有哪些垃圾回收算法?
Java虚拟机面试题, Java 中有哪些垃圾回收算法?
QA
Step 1
Q:: Java 中有哪些垃圾回收算法?
A:: Java 中主要的垃圾回收算法包括:1. 标记-清除算法(Mark-Sweep):这是最基础的垃圾回收算法,它将对象分为 '活的' 和 '死的',然后清除死亡对象。2. 复制算法(Copying):将存活的对象从一个区域复制到另一个区域,未被复制的对象被自动清除。3. 标记-压缩算法(Mark-Compact):标记存活的对象,然后将其压缩到内存的一端,释放剩余空间。4. 分代回收算法(Generational Collecting):将堆分为不同代,如年轻代和老年代,采用不同的回收算法处理不同代的对象。5. G1(Garbage First):分区堆内存,以并行和增量方式回收垃圾,适用于大堆内存。6.
ZGC(Z Garbage Collector):设计为在大堆内存中保持低延迟的垃圾收集器。
Step 2
Q:: Java 中的分代回收机制是什么?
A:: Java 的分代回收机制将堆内存分为不同的代(年轻代、老年代),分别处理生命周期不同的对象。年轻代对象频繁创建和销毁,因此使用效率高的算法(如复制算法)来快速回收。老年代对象存活时间较长,使用如标记-
压缩算法进行回收。此机制能提高垃圾回收效率,减少垃圾回收对应用程序性能的影响。
Step 3
Q:: G1
垃圾收集器的工作原理是什么?
A:: G1 垃圾收集器将堆划分为多个大小相同的区域(Region),通过跟踪每个区域的垃圾量,优先回收垃圾最多的区域(即垃圾优先)。G1 采用并行和并发方式进行回收,以减少应用程序停顿时间,并结合标记-
清除和复制算法的优点来优化性能,特别适用于大内存的应用程序。
Step 4
Q:: Java 中的垃圾回收器有哪些?
A:: Java 中的主要垃圾回收器包括:1. Serial Collector:单线程的垃圾回收器,适用于小型应用。2. Parallel Collector:多线程的垃圾回收器,适用于需要较高吞吐量的应用。3. CMS(Concurrent Mark-Sweep):并发标记清除垃圾回收器,适用于需要低延迟的应用。4. G1:垃圾优先收集器,适用于大内存低停顿的应用场景。5. ZGC:低延迟垃圾回收器,适用于超大内存场景。6.
Shenandoah:一种高效的并发垃圾回收器,具有较低的停顿时间。
Step 5
Q:: 什么是 Java 中的内存泄漏?
A:: Java 中的内存泄漏是指程序中的对象不再被使用,却无法被垃圾回收器回收,因为还有对这些对象的引用存在。虽然 Java 具有自动垃圾回收机制,但程序设计不当(如使用静态集合类保存大量对象、未正确释放外部资源等)仍可能导致内存泄漏,从而引发 OutOfMemoryError。