并发垃圾收集

时间:2018-12-29 10:32:02

标签: multithreading garbage-collection

为什么简单的标记和清除算法不能同时完成。

我已经读到,并发垃圾收集需要CMS(并发标记和清除算法),它比简单的标记和清除算法更复杂,但是需要CMS的简单标记有什么问题?

1 个答案:

答案 0 :(得分:1)

最简单的原因是,如果对象的路径发生更改,标记可能会丢失一些可到达的对象。考虑以下程序和方案:

a = new Object();
b = new Object();
b.c = new Object();
// gc process marks a, nothing reachable from a
a.c = b.c;
b.c = null;
// gc process marks b, nothing reachable from b
// marking phase completes, a.c is not marked
// gc sweeps a.c
print a.c; // safety violation