采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
Mark > Mutation > Sweep Mark阶段到了E,E被标记为灰色,此时发生Mutation,E引用G断开,D引用G
疑问:因为下一次标记是从灰色E开始且E引用G已经被断开了,所以G不会被扫描到,故一直为白色,但是新增了D对G的引用的(但D已经被标记为了黑色,所以不会再从D开始标记),这时就会发生被D引用的G被回收,这样程序是不是就出问题了啊?明明被引用的对象却被回收了。
增加引用就应该把被增加的节点涂成灰色,这就是集合的优势。
还有个疑问就是,标记清除算法什么时候会STW,是Mark阶段?Sweep阶段?还是整个垃圾回收阶段? 要是整个垃圾回收阶段的话为什么还有Mutation问题啊,不是所有线程都停止了吗
gc mark,sweep最好都stw下。原因是减少了很多并发问题处理。所以除了z我不太清楚,大部分设计都会stw。当然这里面有一些标记可以和用户线程并行,理论上如果是多次标记,然后清除,那么只有最后一次标记必须stw。
明白了,非常感谢!
登录后可查看更多问答,登录/注册
深度剖析大厂面试高频真题,让你秒变offer收割机
1.3k 6
950 11
947 10
645 10
717 8