在阅读一本书时,我了解到 JavaScript 的实现倾向于使用两种垃圾回收方法中的一种。要么是标记清除,要么是引用计数。我理解引用计数的概念。统计一个值存在多少个引用。当一个变量被赋值时,该变量的引用计数增加 1,当变量被其他值覆盖时,'THIS' 值的引用计数减少 1。该过程继续,当引用数达到 0 时,值被认为可以安全删除。
然后有一节解释了垃圾回收中引用计数方法的交叉引用问题。它说,只要对象 A 的属性被分配给对象 B 的引用,反之亦然,那么交叉引用问题就会出现,因为计数永远不会达到零。书上举的例子是这样的
var A = new Object();
var B = new Object();
A.prop = B;
B.prop = A;
我完全错过了这一点。我的意思是,上面的代码是如何导致交叉引用问题的?为什么计数永远不会达到零。
注意 我写下了我所理解的关于引用计数的所有内容。如果我在某个地方错了,请告诉我。谢谢。
最佳答案
这是一个例子:
class Person{
string name;
Person lover;
}
A = new Person("A");
B = new Person("B");
A.lover = B;
B.lover = A;
A = NULL;
B = NULL;
因此,计数永远不会达到零。
关于javascript - 了解垃圾回收引用计数方法中的交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417586/