文章G1: One Garbage Collector To Rule Them All 给出了G1 GC的详细说明。
然而,我感到很困惑的一件事是,在我们刚完成标记周期阶段之后为什么G1 GC did not have any marking information
。在我们可以进行混合GC 之前,我们仍然需要为混合GC重新安装一个年轻的GC阶段,以便收集非空的旧区域。
在标记周期中,我们已经在整个堆中进行了标记。在这种情况下,我们知道在旧区域可以回收什么。这让我对标记循环阶段的目的感到不确定。
我在幻灯片中找到了:Garbage Collector Details and Tuning - AWS(页面 41 ),Cleanup phase → recycles empty old regions
。在标记循环阶段,我们只收集完全空的旧区域。
为什么我们不能回收不完全空的旧区域?我们甚至需要推迟在混合GC阶段收集非空(非完全空)旧区域。由于我认为不需要混合GC阶段,我们可以在标记周期阶段后立即进行收集。
一旦G1 GC成功完成并发标记周期,它就有了 启动旧一代集合所需的信息。 到目前为止,旧区域的收集是不可能的 G1 GC没有与之相关的任何标记信息 区域。一个促进压实和疏散的集合 从那以后,老一代被恰当地称为“混合”集合 G1 GC不仅收集了伊甸园和幸存者地区,而且还收集了伊甸园和幸存者地区 (可选)将旧区域添加到混合中。现在让我们讨论一下 了解混合收藏的重要细节。
我无法理解为什么当我们完成marking cycle phase
时,我们仍然不知道与这些地区相关的任何标记信息。
those regions
是否意味着伊甸园和幸存者区域中新分配的对象?我们可以在标记阶段的CleanUp
阶段收集非空旧区域吗?