【问题标题】:Java CMS GC - Initial markJava CMS GC - 初始标记
【发布时间】:2018-05-14 05:50:12
【问题描述】:

我正在阅读有关 CMS GC 的信息,需要澄清一下。 在website我们可以找到:

第一阶段:初始标记。这是 CMS 期间的两个停止世界事件之一。这个阶段的目标是标记老一代中的所有对象,这些对象要么是直接 GC 根,要么是从年轻一代中的某个活动对象中引用的。后者很重要,因为老年代是单独收集的。

必须找到年轻代到老年代的引用,但是此时如何扫描年轻代呢?是不是像 Minor GC 那样全扫描?

【问题讨论】:

  • 但是它会全面扫描所有年轻代吗?
  • 它有什么替代品?毕竟,它需要找到对老一代的任何强有力的参考。有点不清楚你在问什么。
  • 是的,我知道没有其他选择,但没有说:)

标签: java garbage-collection


【解决方案1】:

Young Generation 到 Old 的引用必须找到,但是此时 Young Generation 是如何被扫描的呢?是不是像 Minor GC 那样全扫描?

是的。扫描整个年轻空间。

不。 这不像是次要 GC。 Young (minor) GC 不会扫描整个年轻空间。 Young 集合正在遍历对象图,仅访问(和应对)活动对象。

正如您可能猜到的,从可能的描述初始扫描可能会导致 GC 暂停。 CMS 通常会在年轻 GC 完成后“不久”进行初始标记,假设此时年轻空间很小。

同样的问题也适用于 CMS 的备注阶段,其中还涉及年轻空间全扫描。您可以在my article 中找到有关 CMS 机制的更多详细信息。

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多