【问题标题】:Concurrent Mark and Sweep algorithm details并发标记和扫描算法详细信息
【发布时间】:2014-05-27 07:07:12
【问题描述】:

我正在努力了解和获取有关 CMS 终身收集周期中涉及的步骤的更多详细信息。

  1. 初始标记
  2. 并发标记
  3. 并发预清理
  4. 重新标记
  5. 并发扫描
  6. 并发重置

在很多地方都非常简短地解释了这些步骤。但是,如果我必须在一个带有图表和伪示例的类中描述它们,我可以从哪里获得这些信息?

PS - 我在 Google 上进行了广泛的搜索,其中包含很多我理解的文字内容和行话。但我正在寻找更生动的解释,以便我可以教导我的听众。

这些是一些流行的链接,第三个很有希望,但它没有特别解释 CMS

  1. http://www.infoq.com/articles/Java_Garbage_Collection_Distilled
  2. http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
  3. http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/

亲爱的,感谢您发表评论并为我指出一些资源。我试图创建 CMS 步骤的可视化表示,如果这符合您的理解,请告诉我?

另外我似乎缺少了 Compacting 步骤,它属于哪个步骤?

答案:好的,CMS 不处理压缩,而是委托给完整的 GC。

【问题讨论】:

标签: java garbage-collection


【解决方案1】:

从 java 1.5 开始,还有一个被遗漏的阶段是“concurrent abortable preclean”。它的目的是延迟评论,直到在伊甸园空间达到所需的占用率。

除此之外,你几乎都在轨道上。

我建议你看看这个 old oracle gc whitepaper 和这个 step by step description of the CMS gc logs 。它确认您在图像中放置的步骤。

这个blog post总结的很好。

【讨论】:

    【解决方案2】:

    对我来说

    http://insightfullogic.com/blog/2013/may/7/garbage-collection-java-3

    与其前辈

    http://insightfullogic.com/blog/2013/feb/20/garbage-collection-java-1
    http://insightfullogic.com/blog/2013/mar/6/garbage-collection-java-2

    说清楚了。我忘了我也看过上面@gap_j提到的链接,也很好。

    您询问压缩步骤在哪里,但 CMS 没有。这可能会导致其自身的问题,尤其是会增加分配内存的成本(因为 JVM 必须使用 list 来跟踪哪些内存是空闲的,并且不能只从占用空间的末尾分配内存)和它有时可能意味着碎片堆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多