有人能解释一下G1垃圾收集器是如何工作的吗?到目前为止,我还找不到任何全面、易于理解的描述。
谢谢
发布于 2010-05-21 20:46:36
收集器将堆拆分为固定大小的区域,并跟踪这些区域中的实时数据。它保留了一组指针--“记忆集”--进出该区域。当GC被认为是必要的时,它会首先收集活动数据较少的区域(因此,“垃圾优先”)。通常,这可能意味着在一个步骤中收集整个区域:如果指向区域的指针数量为零,则不需要对该区域进行标记或扫描。
对于每个地区,它跟踪各种指标,这些指标描述了收集这些数据需要多长时间。您可以给它一个关于暂停时间的软实时约束,然后它会尝试在该约束时间内尽可能多地收集垃圾。
有关于G1的JavaOne讨论和一些关于这个主题的文章:
发布于 2013-10-11 02:33:40
在这个新的JavaOne 2012会话中,G1也得到了很好的解释:G1垃圾收集器性能调整 [youtube],[PDF]。
首先介绍了内容管理系统和G1,并对它们进行了比较,然后说明了G1的分析和调整。
G1特性
典型的G1堆可能如下所示:

以下是每个G1阶段的摘要:
1. Young集合
1.1 初级阶段-次要GC
(promotion).
1.2 年轻/初始标记
2.老一代收藏
2.1 初始标记-参见1.2。
2.2 GC备注
一次停止-世界暂停,并发标记实时objects
上执行收集需要多长时间
2.3。GC暂停(混合)
3.完全GC
请注意,G1旨在尽可能避免完整的GC。从Java7u40开始,G1中的FullGC暂停没有经过优化,而是作为单线程操作实现的。在使用G1时,尽量避免完全GC -如果您看到任何FullGC暂停,您的GC设置可能需要一些调整。
资源
发布于 2018-01-20 06:39:43
我发现这篇文章中的Oracle's page在以一种容易理解的方式解释概念方面非常有帮助,而且不会太长。
https://stackoverflow.com/questions/2881827
复制相似问题