理解垃圾收集参考计数方法中的交叉引用

时间:2016-07-17 03:19:21

标签: javascript garbage-collection reference-counting cross-reference

在阅读一本书时,我发现JavaScript的实现倾向于使用两种垃圾收集方法中的一种。它是标记和扫描,或引用计数。我理解引用计数的概念。计算出存在多少个值的引用。当为变量赋值时,该变量的引用计数增加1,当变量被某个其他值覆盖时,引用计数为“此变量”。值减少1.进程继续,当引用数达到0时,该值被认为是安全的删除。

然后有一节解释了垃圾收集中引用计数方法的交叉引用问题。它说,只要对象A的属性被赋予对象B的引用,反之亦然,那么交叉引用问题就会到来,因为计数永远不会达到零。书中给出的例子是这样的

var A = new Object();
var B = new Object();
A.prop = B;
B.prop = A;

我完全错过了这个。我的意思是,上面的代码如何导致交叉引用问题?为什么计数永远不会达到零。

注意我写了一些我对引用计数的理解。如果我在某处错了,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

这是一个例子:

class Person{
    string name;
    Person lover;
}

A = new Person("A");
B = new Person("B");
A.lover = B;
B.lover = A;

A = NULL;
B = NULL;

explain

所以,计数永远不会达到零。