有人可以解释一下 G1 垃圾收集器是如何工作的吗?我还没有找到任何全面易懂的描述。
谢谢
有人可以解释一下 G1 垃圾收集器是如何工作的吗?我还没有找到任何全面易懂的描述。
谢谢
收集器将堆分成一些固定大小的区域,并跟踪这些区域中的活动数据。它保留了一组指针,即“已记住的集合”,指向区域内外。当需要进行垃圾回收时,它首先收集具有较少活动数据的区域(因此称为“垃圾优先”)。通常,这意味着在一个步骤中收集整个区域:如果指向该区域的指针数量为零,则不需要对该区域进行标记或清除操作。
对于每个区域,它跟踪各种描述收集时间的度量。您可以给它软实时约束暂停时间,然后它尝试在受到约束的时间内尽可能多地收集垃圾。
有关G1的JavaOne演讲以及一些相关文章:
这个JavaOne 2012新的演讲中也很好地解释了G1垃圾回收器:G1 Garbage Collector Performance Tuning [youtube], [PDF]。
他们从介绍CMS和G1,它们之间的比较开始,然后解释了G1的分析和调优。
G1的特点:
典型的G1堆可能如下所示:
以下是每个G1阶段的概述:
1.1 年轻代阶段 - Minor GC
1.2 年轻/初始标记
2.1 Initial Mark - 参见 1.2.
2.2 GC remark
2.3. GC pause (mixed)
请注意,G1旨在尽可能避免Full GC。从Java 7u40开始,G1中的FullGC暂停未经过优化,实现为单线程操作。使用G1时,请尽量避免Full GC-如果您看到任何FullGC暂停,您的GC设置可能需要进行调整。