有人可以解释G1垃圾收集器的工作原理吗?我无法在任何地方找到任何全面,易于理解的描述。
由于
答案 0 :(得分:41)
收集器将堆分成固定大小的区域并跟踪这些区域中的实时数据。它保留了一组指针 - “记忆集” - 进出该地区。当认为有必要时,它首先收集具有较少实时数据的区域(因此,“垃圾优先”)。通常,这可能意味着一步收集整个区域:如果指向区域的指针数为零,则不需要对该区域进行标记或扫描。
对于每个地区,它会跟踪各种指标,这些指标描述了收集它们需要多长时间。你可以给它一个关于暂停时间的软实时约束,然后尝试在那个受约束的时间内收集尽可能多的垃圾。
有JavaOne谈论G1和关于这个主题的文章很少:
答案 1 :(得分:30)
在新的JavaOne 2012会话中也很好地解释了G1: 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旨在尽可能避免使用Full GC。从Java 7u40开始,G1中的FullGC暂停未经过优化,并且实现为单线程操作。使用G1时,尽量避免使用Full GC - 如果发现任何FullGC暂停,GC设置可能需要进行一些调整。
答案 2 :(得分:0)
我发现Oracle's page对于以可访问的方式解释概念非常有帮助而不会过于冗长。