interview
java-virtual-machine
Java中常见的垃圾收集器有哪些?

Java虚拟机面试题, Java 中常见的垃圾收集器有哪些?

Java虚拟机面试题, Java 中常见的垃圾收集器有哪些?

QA

Step 1

Q:: Java 中常见的垃圾收集器有哪些?

A:: Java 中常见的垃圾收集器包括:Serial 收集器、Parallel 收集器、CMS(Concurrent Mark-Sweep)收集器、G1(Garbage-First)收集器、ZGC(Z Garbage Collector)和Shenandoah收集器。这些垃圾收集器在不同的场景下具有不同的性能和适用性。

Step 2

Q:: Serial 收集器的工作原理是什么?

A:: Serial 收集器是最基本的垃圾收集器,它采用单线程进行垃圾收集,会在收集时暂停所有应用线程。由于只使用一个线程,它的实现相对简单,适用于单核 CPU 和内存较小的场景,但在多核 CPU 和大内存环境下表现不佳。

Step 3

Q:: CMS 收集器的优点和缺点是什么?

A:: CMS 收集器是一种以最短停顿时间为目标的垃圾收集器,适用于需要快速响应的应用程序。优点是停顿时间短,缺点是使用更多 CPU 资源,并且会产生内存碎片,导致需要 Full GC(完全垃圾收集)。

Step 4

Q:: G1 收集器如何改善垃圾收集的性能?

A:: G1 收集器通过将堆划分为多个区域(Region),并优先回收垃圾最多的区域,减少了垃圾收集的停顿时间。G1 适用于具有大量堆内存和复杂应用程序的环境,能够有效管理大内存并降低停顿时间。

Step 5

Q:: 什么是垃圾收集的“Stop-the-World”事件?

A:: “Stop-the-World”事件指的是垃圾收集器在进行垃圾收集时暂停所有应用线程的现象。虽然不同的垃圾收集器尽量减少“Stop-the-World”的时间,但在一些阶段如标记和清理阶段仍不可避免。

用途

垃圾收集器是 Java 虚拟机性能调优的重要部分。在实际生产环境中,垃圾收集器的选择会直接影响应用程序的响应时间、吞吐量和资源利用率。面试中考察这一内容的原因是为了确保候选人能够根据不同的应用场景选择合适的垃圾收集器,并在性能问题出现时能够进行有效的调优。\n

相关问题

🦆
什么是内存泄漏,Java 如何检测和防止内存泄漏?

内存泄漏是指应用程序未能及时释放不再使用的对象导致内存被耗尽的情况。在 Java 中,可以通过使用工具如 VisualVM、MAT(Memory Analyzer Tool)等来检测内存泄漏,避免在代码中出现长时间未被回收的对象引用。

🦆
Java 中的堆和栈有什么区别?

堆和栈是 Java 内存管理的两个重要区域。堆用于存放所有对象实例,而栈用于存放方法调用和局部变量。堆内存是所有线程共享的,而栈是线程私有的。

🦆
Java 中的强引用,软引用,弱引用和虚引用的区别是什么?

强引用是最普通的引用类型,垃圾收集器永远不会回收被强引用的对象。软引用用于内存敏感的缓存,可以在内存不足时回收对象。弱引用对象只能存活到下一次垃圾收集时。虚引用主要用于跟踪对象被垃圾收集的状态。

🦆
在 Java 中如何避免 OutOfMemoryError?

避免 OutOfMemoryError 的方法包括适当设置堆大小、及时释放不再使用的对象、使用内存分析工具检测内存泄漏、选择合适的垃圾收集器并根据应用需求进行调优。