垃圾优先垃圾回收器如何工作?
2022-09-01 00:00:21
有人可以解释一下G1垃圾收集器是如何工作的吗?我还没有在任何地方找到任何全面,易于理解的描述。
谢谢
有人可以解释一下G1垃圾收集器是如何工作的吗?我还没有在任何地方找到任何全面,易于理解的描述。
谢谢
收集器将堆拆分为固定大小的区域,并跟踪这些区域中的实时数据。它保留了一组指针 - “记住的集合” - 进出该区域。当认为有必要使用 GC 时,它会首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这可能意味着一步收集整个区域:如果进入某个区域的指针数为零,则不需要对该区域进行标记或扫描。
对于每个区域,它会跟踪各种指标,这些指标描述了收集它们所需的时间。您可以为它提供关于暂停时间的软实时约束,然后尝试在该受限时间内收集尽可能多的垃圾。
有JavaOne关于G1的讨论和关于这个主题的文章:
G1在这个新的JavaOne 2012会议中也得到了很好的解释:G1垃圾收集器性能调优[youtube],[PDF]。
他们从CMS和G1的介绍开始,进行比较,然后解释G1分析和调整。
G1 特性
典型的 G1 堆可能如下所示:
以下是每个G1阶段的摘要:
1.1 年轻阶段 - 次要GC
1.2 年轻/初始标记
2.1 初始标记 - 见1.2。
2.2 GC 备注
2.3. GC 暂停(混合)
请注意,G1 旨在尽可能避免全 GC。从 Java 7u40 开始,G1 中的 FullGC 暂停未得到优化,而是作为单线程操作实现。使用G1时,尽量避免使用FullGC - 如果您看到任何FullGC暂停,您的GC设置可能需要一些调整。