G1 GC 中的 Full GC 与 Major GC

Full GC vs Major GC in G1 GC

我刚刚开始学习 G1 GC。这是我的另一个问题的延续:Full GC in G1 GC

我看到一篇文章说 full gc 和 major gc(old gen collection)是两个不同的东西,full gc 是单线程的。我对此感到困惑。如果两者是两个不同的东西,那么 full gc 如何收集垃圾,即在 G1 GC 的 full gc 期间执行哪些算法或阶段或步骤。

在 G1 的情况下,有一种方法可以区分这两者(这并不适用于所有 GC 算法)。

G1 为堆使用区域(通常大小为 1Mb)。这些内存区域组合在一起形成年轻代和老年代作为独立的逻辑区域。对于 old gen 集合,G1 将尝试通过简单地回收不再有任何实时数据的区域(非常便宜)来回收足够的 space,或者将实时数据从人口稀少的区域复制到空区域(从而最大化多少活数据在该区域)。

但是,如果 G1 无法通过这种方式回收足够的 space,它必须回退到完整的压缩集合。

这将解释 major collection 和 full GC 之间的区别。