由于循环引用的存在,我们在删除了a跟b之后,引用计数是1,这样,现有的垃圾回收机制是永远不可能把她们删除了。他们将永远存在于内存中。
我们当然不能对这种情况置之不理,于是,我们又添加了两种新的回收机制:标记清理,分代回收。这两种机制组合起来的效果笼统的说,我们就是设定了一个周期性任务,周期一到,任务启动,该任务是:对所有的可变对象都分析一遍,找出像ab这样的已经不用的,但是普通的垃圾回收机制又回收不了的垃圾,并清理掉,因为不可变对象不存在循环引用,所以该任务不需要对他们分析,只需要分析可变对象即可。
我们用标记清除的方法来完成这一任务,而分代回收就是设定到底是什么时候执行一遍标记清除。