interview
java-virtual-machine
Java 的 CMS 垃圾回收流程是怎样的

Java 虚拟机面试题, Java 的 CMS 垃圾回收流程是怎样的?

Java 虚拟机面试题, Java 的 CMS 垃圾回收流程是怎样的?

QA

Step 1

Q:: 什么是Java虚拟机(JVM),它的主要作用是什么?

A:: Java虚拟机(JVM)是一个虚拟的计算机,它能够执行Java字节码。JVM屏蔽了底层操作系统的差异,使得Java程序可以在各种操作系统上运行而无需修改。JVM的主要作用包括:加载代码、执行代码、管理内存(包括垃圾回收)、以及提供安全性管理。

Step 2

Q:: Java的CMS垃圾回收器的工作流程是怎样的?

A:: CMS(Concurrent Mark-Sweep)垃圾回收器是JVM的一种并发垃圾回收器,适用于对响应时间敏感的应用程序。其工作流程包括: 1. 初始标记(Initial Mark):标记直接可达的对象,时间短暂,需要暂停所有应用线程。 2. 并发标记(Concurrent Mark):在应用线程继续运行的情况下,GC线程并发地遍历对象图,标记所有可达对象。 3. 重新标记(Remark):再次暂停所有应用线程,修正并发标记阶段由于程序运行导致的标记变化。 4. 并发清除(Concurrent Sweep):在应用线程继续运行的情况下,清除不可达对象,释放内存。

Step 3

Q:: CMS垃圾回收器有哪些优缺点?

A:: 优点: 1. 并发性:大部分工作与应用线程并发执行,因此减少了全停顿的时间。 2. 低延迟:适用于对响应时间敏感的应用场景。 缺点: 1. 不能处理浮动垃圾(floating garbage),需要更多的内存空间。 2. 标记和清除过程中的碎片化问题,可能导致内存不足而触发Full GC。 3. 停顿时间相较于G1等垃圾回收器可能不够短。

用途

CMS垃圾回收器的知识对于Java开发者来说尤为重要,尤其是在高并发、低延迟的应用中,如在线交易系统、实时数据处理系统等。理解CMS的工作流程有助于开发者在应用性能不达标时调优JVM参数,或者在面对内存相关问题时快速定位和解决问题。CMS虽然逐渐被G`1`替代,但在一些老旧系统中仍然广泛使用,因此需要对其有足够的了解。\n

相关问题

🦆
G1垃圾回收器与CMS垃圾回收器的区别是什么?

G1(Garbage First)垃圾回收器和CMS垃圾回收器的主要区别在于:G1通过分代区域回收垃圾,以减少停顿时间,并且具备整理内存碎片的能力。G1的设计目标是替代CMS,以提供更可预测的停顿时间和更好的内存利用率。

🦆
什么是垃圾收集的stop-the-world现象?

“Stop-the-world”现象指的是垃圾回收器在执行垃圾回收操作时,必须暂停所有应用线程的情况。这会导致应用程序在回收期间暂时停止响应,从而影响性能。CMS通过并发回收的方式减少了这种停顿时间。

🦆
Java虚拟机中的分代垃圾回收机制是什么?

分代垃圾回收机制基于对象的生命周期将堆内存划分为新生代、老年代和永久代(Java 8之后为元数据区)。新生代中的对象通常存活时间较短,因此采用复制算法进行回收。老年代中的对象存活时间较长,通常采用标记-清除算法。分代回收可以提高垃圾回收的效率,减少停顿时间。

🦆
如何调优CMS垃圾回收器的参数?

调优CMS垃圾回收器的参数包括: 1. -XX:+UseConcMarkSweepGC:启用CMS垃圾回收器。 2. -XX:CMSInitiatingOccupancyFraction:设置CMS在老年代使用率达到某个百分比时开始回收。 3. -XX:+UseCMSCompactAtFullCollection:在Full GC后进行内存整理以减少碎片。 4. -XX:CMSFullGCsBeforeCompaction:设置多少次Full GC后进行一次压缩。通过这些参数可以控制CMS的行为,平衡内存使用和停顿时间。