并发标记和扫描算法详细信息

时间:2014-05-27 07:07:13

标签: java garbage-collection

我很难理解并获得有关CMS终身收集周期所涉及步骤的更多详细信息。

  1. 初始马克
  2. Concurrent Mark
  3. 同时预清洁
  4. 重新标记
  5. 并发扫描
  6. 并发重置
  7. 很多地方都会在很短的时间内解释这些步骤。但是,如果我必须在一个带有图表和伪示例的类中描述它们,我可以从哪里获取这些信息?

    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/

    4. 亲爱的所有人,感谢评论并指出了一些资源。我试图创建CMS步骤的直观表示,如果符合您的理解,请告诉我?

      此外,我似乎错过了压缩步骤,它属于哪个步骤?

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

      Stages of CMS GC

2 个答案:

答案 0 :(得分:2)

启动java 1.5,还有另一个错过的阶段是"并发中止的预清洁"。它旨在推迟这一说法,直到伊甸园空间达到理想的占用率。

除此之外,你已经走上了正轨。

我建议您查看此old oracle gc whitepaper和此step by step description of the CMS gc logs。它确认了您在图像中添加的步骤。

blog post总结了很多事情。

答案 1 :(得分:1)

对我来说

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来跟踪哪个内存是空闲的,并且不能从占用空间的末尾分配内存)并且它有时可能意味着碎片堆。