Java虚拟机面试题, Java 的 G1 垃圾回收流程是怎样的?
Java虚拟机面试题, Java 的 G1 垃圾回收流程是怎样的?
QA
Step 1
Q:: Java 的 G1
垃圾回收流程是怎样的?
A:: G1(Garbage First)是Java虚拟机(JVM)的一个垃圾回收器,它的主要目标是满足高吞吐量的同时达到低暂停时间。G1将堆划分为多个大小相同的区域(Region),并通过并行回收和增量回收来减少GC停顿时间。G1
的垃圾回收流程大致分为以下几个阶段:
1.
初始标记(Initial Marking): 标记从GC Roots直接可达的对象,这个阶段会导致一个短暂的停顿。
2.
并发标记(Concurrent Marking): 从GC Roots开始分析整个堆中的对象,找出存活对象,这个阶段是并发执行的,不会暂停应用线程。
3.
最终标记(Final Marking): 完成标记过程,处理在并发标记期间发生变化的引用关系,这个阶段也会有短暂的停顿。
4.
筛选回收(Evacuation): 选定回收区域,将存活对象复制到其他区域,并对这些区域进行回收,这个阶段是并发的,目的是减少全堆回收带来的停顿时间。
Step 2
Q:: G1
垃圾回收器与传统的CMS和Parallel GC有何区别?
A:: G1 垃圾回收器与CMS(Concurrent Mark-
Sweep)和Parallel GC的主要区别在于其设计目标和实现方式:
1. **设计目标:** G1
旨在通过可预测的停顿时间控制来达到高吞吐量和低延迟,而CMS主要关注低延迟,Parallel GC则更注重高吞吐量。
2. **堆划分:** G1
将堆划分为多个大小相等的区域(Region),而CMS和Parallel GC则分别采用不同的分代(Generation)模型。
3. **回收方式:** G1
使用的是整体堆回收和局部回收相结合的方式,而CMS主要依赖并发标记和清理来减少停顿时间,Parallel GC则完全是并行的回收策略。
4. **并发回收:** G1
可以在应用线程运行的同时进行并发回收操作,减少应用停顿时间,而CMS也是并发回收,Parallel GC则不支持并发回收。