并发标记和扫描算法详细信息
我很难理解并获得有关CMS终身收集周期所涉及的步骤的更多细节。
- 初始标记
- 并行标记
- 同时预清洁
- 备注
- 并发扫描
- 并发重置
很多地方都很简单地解释了这些步骤。 但是,如果我必须在一个带有图表和伪示例的类中描述它们,我可以从哪里获取该信息?
PS – 我在Google上进行了广泛的搜索,它引发了许多我理解的文字内容和术语。 但我正在寻找一个更动画的解释,以便我可以教我的观众。
这些是一些受欢迎的链接,第三个很有前途,但它没有特别解释CMS
- http://www.infoq.com/articles/Java_Garbage_Collection_Distilled
- http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
- http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/
亲爱的,感谢评论并指出了一些资源。 我试图创建CMS步骤的直观表示,如果符合您的理解,请告诉我?
此外,我似乎错过了压缩步骤,它属于哪个步骤?
答 :好的,所以压缩不是由CMS处理的,而是委托给完整的GC。
为了我
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来跟踪哪个内存是空闲的,并且不能仅仅从占用空间的末尾分配内存)和它有时可能意味着碎片堆。
从java 1.5开始,还有另一个错过的阶段是“并发中止预清理”。 它旨在推迟这一说法,直到伊甸园空间达到理想的占用率。
除此之外,你几乎正在走上正轨。
我建议你看一下这个旧的oracle gc白皮书以及CMS gc日志的这一步说明 。 它确认了您在图像中添加的步骤。
这篇博文最后总结了一些事情。