首页 > 解决方案 > 垃圾收集并发

问题描述

为什么简单的标记和扫描算法不能同时进行。

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

标签: multithreadinggarbage-collection

解决方案


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

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

推荐阅读