在这个新的JavaOne 2012会话中也很好地解释了G1:G1垃圾收集器性能调整[youtube],[PDF]。
他们先介绍CMS和G1,然后进行比较,然后说明G1的分析和调整。
G1特征
固定大小的区域-堆分成多个区域(1Mb-32MB,〜2000,由VM确定)。
伊甸园,幸存者和OldGen表示为一组逻辑区域。
活物从一个区域撤离到另一个区域
典型的G1堆可能看起来像:
以下是每个G1阶段的摘要:
1.青年收藏
1.1青年期-次要GC
疏散-停在世界平行的次要GC,将活物从年轻一代疏散到幸存者区域(保育)或OldGen区域(促销)。
记帐-下一个年轻GC的伊甸园/幸存者空间的大小是根据每个区域的统计信息以及应用设置的暂停时间目标确定的。 G1估计下一个YoungGC需要多少时间。
调整大小-G1现在可以轻松缩小/调整伊甸园/幸存者区域的大小。
1.2年轻/最初的标记
GC Young初始标记是OldGen集合的初始标记阶段,与YoungGC集合并行执行。 初始标记是并行并发标记过程。
2.老一代收藏
2.1初始标记-参见1.2。
2.2 GC备注
一站式暂停,同时标记活动对象
记帐-对于每个区域,在备注期间,G1跟踪该区域的活动状态(每个区域中有多少个对象),并引用该区域(记忆集)-这告诉G1对此进行收集需要多长时间 地区。
回收空区域
2.3。 GC暂停(混合)
选择生活水平低的地区并收集其中一些。 因此,我们正在收集“垃圾优先”。
这些区域的实际收集与下一个Young GC同时执行,因此OldGen的收集没有单独的暂停。 因此,GC暂停(混合)是YoungGen和一部分旧Gen的混合集合。
在GC暂停(混合)结束时,旧的gen区域中可能会留有一些垃圾,这将在以后收集,具体取决于将来的生命力,暂停时间目标和未使用的区域数。
3.完整GC
请注意,G1旨在尽可能避免使用Full GC。 从Java 7u40开始,G1中的FullGC暂停尚未优化,而是作为单线程操作实现的。 使用G1时,请尽量避免使用Full GC-如果您看到FullGC暂停,则您的GC设置可能需要进行一些调整。
资源资源
G1:一个垃圾收集器来统治他们全部
JavaOne 2012会议:G1垃圾收集器性能调整[youtube],[PDF]
Java中的垃圾回收(4)-垃圾优先
垃圾优先垃圾回收-原始纸张。