作者回复: 实际上bitmap不存在也是可以的。使用DFS也足够保证Evacuation的过程是正确的。那么bitmap的作用除了计算垃圾的比例,还有就是可以加速跨region的引用的对象活跃性判断。从这个角度看,prevBitMap只要有就能加速转移的过程,哪怕它只是描述一部分空间内的对象是否活跃。当Evacuation开始时,prevBitMap有多少就用多少好了。prevTAMS到top之间的对象都交给DFS去处理就行了。
作者回复: 你的想法是对的。一开始CSet是空的,所以所有的老年代Region都不属于CSet。随着标记的进行,一些老年代Region的垃圾比例超过一定阈值就会被添加到CSet中,那么从它出发的引用就不用再管了。所以CSet的构建并不是一下子完成的。这样有助于提高效率。
作者回复: 这不就是多标么。多标会产生浮动垃圾,但下一次会被回收掉。原文中有的,可以再仔细读读
作者回复: 是的。目前讲到的内容来说,evac阶段都是stw的,下节课才讲如何在copy阶段也可以并发。
作者回复: 对的。