g1
G1(Garbage-First)是Java虚拟机(JVM)中的一种垃圾回收器,它是一种面向服务端应用的垃圾回收器,旨在实现低延迟和高吞吐量的垃圾回收。
G1垃圾回收流程
G1(Garbage-First)垃圾回收器是 JDK 7 引入的一种垃圾回收器,设计旨在提供更可预测的低延迟垃圾回收。G1 的垃圾回收过程主要分为以下几个步骤:
-
初始标记(Initial Marking):
- G1 的垃圾回收开始时,会进行一次初始标记阶段。在这个阶段,G1 垃圾回收器会标记出所有的根对象,包括应用程序线程的栈帧、静态对象、和一部分年轻代中的对象。
-
并发标记(Concurrent Marking):
- G1 垃圾回收器会并发地进行标记过程,即在应用程序线程运行的同时进行。在这个阶段,G1 标记剩余的存活对象,包括从初始标记阶段找到的对象以及在标记过程中新创建的对象。
-
重新标记(Remark):
- 在并发标记阶段结束后,G1 需要进行一次重新标记。这个阶段的目标是标记在并发标记阶段发生变化的对象,确保标记的准确性。与初始标记不同,重新标记是短暂的暂停,因为它只关注于在并发标记期间发生的变化。
-
清理(Cleanup):
- 在重新标记之后,G1 垃圾回收器会启动一个并发的清理过程,删除未标记的垃圾对象。这一过程分阶段进行,从年轻代和一些老年代区域开始。G1 垃圾回收器的目标是尽量避免全局停顿,因此清理过程是并发执行的。
-
并发清理(Concurrent Cleanup):
- 在清理阶段的同时,G1 垃圾回收器会继续并发地执行一些清理工作,比如空闲区域的合并,以提高内存利用率。
这些步骤构成了 G1 垃圾回收器的整体垃圾回收过程。其中,并发标记和并发清理是 G1 的特色,通过并发执行垃圾回收的一部分来减小停顿时间。这有助于在大堆内存和高吞吐量的情况下提供可预测的低延迟。