Garbage collection 有人能解释一下这场比赛中发生了什么吗;“并发可中止预清洗”;CMS垃圾收集阶段?

Garbage collection 有人能解释一下这场比赛中发生了什么吗;“并发可中止预清洗”;CMS垃圾收集阶段?,garbage-collection,Garbage Collection,我浏览了解释CMS GC的链接,但无法理解并发可中止预清洁正在做什么,如果有人详细解释,这将很有帮助。博客文章提到(非可中止)预清洁阶段的目的: 预清洗也是一个并行阶段。在本阶段中,我们将查看CMS堆中的对象,这些对象通过年轻一代的升级或新分配进行更新,或者在上一个并发标记阶段中进行并发标记时,通过变体进行更新。通过同时重新扫描这些对象,预清理阶段有助于减少下一站世界“备注”阶段的工作量 因此,该阶段是一个优化阶段 然后,可中止的预清洁被描述为 在“并发预清洁”之后,如果Eden占用率高于CMS

我浏览了解释CMS GC的链接,但无法理解并发可中止预清洁正在做什么,如果有人详细解释,这将很有帮助。

博客文章提到(非可中止)预清洁阶段的目的:

预清洗也是一个并行阶段。在本阶段中,我们将查看CMS堆中的对象,这些对象通过年轻一代的升级或新分配进行更新,或者在上一个并发标记阶段中进行并发标记时,通过变体进行更新。通过同时重新扫描这些对象,预清理阶段有助于减少下一站世界“备注”阶段的工作量

因此,该阶段是一个优化阶段

然后,可中止的预清洁被描述为

在“并发预清洁”之后,如果Eden占用率高于CMSSCreachereMarkedenSizeThreshold,我们将开始“并发中止预清洁”,并继续预清洁,直到我们在Eden中拥有CMSSCreachereMarkedenPercentration占用率,否则我们将立即安排“备注”阶段

另一篇文章进一步提到:

备注阶段的安排应确保其不会与ParNew背靠背出现,以免出现ParNew和备注暂停之和的暂停。第二个预清洗阶段开始,并在备注阶段准备开始时中止。中止第二个预清洗阶段是预期的行为。它被中止并不表示有错误。既然备注阶段正在等待,为什么不进行预清洗,但不要为了预清洗而延迟备注

换句话说,abortable preclean是(预清洁优化的)一种优化,用于在年轻集合之间留出备注暂停时间,并以一种有用的方式花费等待时间