javascript - 了解垃圾回收引用计数方法中的交叉引用

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

在阅读一本书时,我了解到 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;

explain

因此,计数永远不会达到零。

关于javascript - 了解垃圾回收引用计数方法中的交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417586/

相关文章:

ios - Objective-C 如何高效地进行引用计数?

actionscript-3 - As3内存泄漏? -如何从内存中垃圾收集新的as3声音对象?

php - 如何修复 PHP 中的内存泄漏

c++ - std::string 的引用计数

javascript - 更改段落文本并突出显示菜单项单击

javascript - 如何让 jquery.couch.app.js 与 IE8 一起工作

javascript - Bootstrap : Call or Select Tabs via URL

javascript - shinyBS 中的动态弹出窗口或工具提示

java - 没有垃圾回收的 JVM

delphi - Delphi 中处理循环强引用