Java虚拟机面试题, JVM 垃圾回收调优的两个主要目标是什么?
Java虚拟机面试题, JVM 垃圾回收调优的两个主要目标是什么?
QA
Step 1
Q:: JVM 垃圾回收调优的两个主要目标是什么?
A:: JVM 垃圾回收调优的两个主要目标是:1. 最大化应用的吞吐量:即在给定时间内,让应用完成尽可能多的任务,减少垃圾回收所占用的时间。2.
最小化应用的停顿时间:即减少垃圾回收导致的应用暂停的时间,以提高系统的响应能力和用户体验。
Step 2
Q:: 什么是垃圾回收器?有哪些常见的垃圾回收器?
A:: 垃圾回收器是 JVM 中用于自动管理内存的组件。常见的垃圾回收器包括:Serial GC、Parallel GC、CMS (Concurrent Mark-Sweep) GC、G1 (Garbage-First)
GC、ZGC 和 Shenandoah GC。每种垃圾回收器都有不同的适用场景,开发者可以根据应用的需求选择合适的垃圾回收器。
Step 3
Q:: 什么是堆内存,堆内存是如何划分的?
A:: 堆内存是 JVM 用于存储对象的内存区域。堆内存通常划分为两部分:新生代 (Young Generation) 和老年代 (Old Generation)。新生代进一步划分为 Eden 区和两个 Survivor 区 (S0, S1)
,老年代用于存放长生命周期的对象。垃圾回收通常在新生代发生频率较高,而老年代的回收频率较低。
Step 4
Q:: 什么是 Minor GC 和 Major GC?它们之间有什么区别?
A:: Minor GC 主要针对新生代的垃圾回收,它发生得比较频繁,但速度较快。Major GC(也叫 Full GC)则涉及整个堆内存(包括新生代和老年代)的垃圾回收,发生频率较低,但会导致较长时间的应用暂停。通常,Major GC 发生时意味着内存管理出现了问题,需要优化。
Step 5
Q:: 如何选择合适的垃圾回收器?
A:: 选择合适的垃圾回收器需要考虑应用的特点和需求。如果应用需要高吞吐量,可以选择 Parallel GC;如果应用需要低停顿时间,可以选择 CMS 或 G1 GC。G1
GC 适合大多数现代应用场景,因为它在吞吐量和停顿时间之间达到了较好的平衡。ZGC 和 Shenandoah GC 适合需要极低停顿时间的大型应用。
Step 6
Q:: 如何监控和调优 JVM 的垃圾回收?
A:: 可以使用工具如 jstat、jvisualvm、JMC (Java Mission Control)
等来监控 JVM 的垃圾回收行为。调优垃圾回收通常涉及调整堆内存大小、年轻代和老年代的比例、垃圾回收器的选择等。此外,分析 GC 日志是调优的关键步骤,可以帮助定位内存泄漏、频繁的 Full GC 等问题。