请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,三色标记算法能解决mutation问题吗?

图片描述
Mark > Mutation > Sweep
Mark阶段到了E,E被标记为灰色,此时发生Mutation,E引用G断开,D引用G

疑问:因为下一次标记是从灰色E开始且E引用G已经被断开了,所以G不会被扫描到,故一直为白色,但是新增了D对G的引用的(但D已经被标记为了黑色,所以不会再从D开始标记),这时就会发生被D引用的G被回收,这样程序是不是就出问题了啊?明明被引用的对象却被回收了。

正在回答

1回答

增加引用就应该把被增加的节点涂成灰色,这就是集合的优势。

1 回复 有任何疑惑可以回复我~
  • 提问者 hllcve #1
    还有个疑问就是,标记清除算法什么时候会STW,是Mark阶段?Sweep阶段?还是整个垃圾回收阶段?
    要是整个垃圾回收阶段的话为什么还有Mutation问题啊,不是所有线程都停止了吗
    回复 有任何疑惑可以回复我~ 2021-06-24 19:48:17
  • 求老仙 回复 提问者 hllcve #2
    gc mark,sweep最好都stw下。原因是减少了很多并发问题处理。所以除了z我不太清楚,大部分设计都会stw。当然这里面有一些标记可以和用户线程并行,理论上如果是多次标记,然后清除,那么只有最后一次标记必须stw。
    回复 有任何疑惑可以回复我~ 2021-06-24 20:21:48
  • 提问者 hllcve #3
    明白了,非常感谢!
    回复 有任何疑惑可以回复我~ 2021-06-24 21:09:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信