概念
标记-清除(Mark And Sweep)分为两步,标记从根变量开始迭代遍历所有被引用的对象,对能够通过引用遍历访问到的对象都进行标记为“被引用”;标记完成后进行清除操作,对没有标记过的内存进行回收(回收同时可能伴有碎片整理操作)。
缺点
这种方法解决了引用计数的不足,但是也有比较明显的问题:每次启动垃圾回收都会暂停当前所有的正常代码执行(STW:Stop the World),即应用程序出现假死,回收使系统响应能力大大降低。
当然后续也出现了很多 mark&sweep 算法的变种(如三色标记法)优化了这个问题。