【问题标题】:understanding cross-reference in reference counting method of garbage collection理解垃圾收集的引用计数方法中的交叉引用
【发布时间】:2016-07-17 03:19:21
【问题描述】:

在阅读一本书时,我了解到 JavaScript 的实现倾向于使用两种垃圾收集方法中的一种。要么是标记和清除,要么是引用计数。我理解引用计数的概念。计算一个值的引用次数。当变量被赋值时,该变量的引用计数增加 1,当变量被其他值覆盖时,“THIS”值的引用计数减少 1。该过程继续进行,当引用数达到 0 时,值被认为可以安全删除。

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

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

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

注意我写了我所理解的关于引用计数的所有内容。如果我在某个地方错了,请告诉。谢谢。

【问题讨论】:

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


    【解决方案1】:

    这是一个例子:

    class Person{
        string name;
        Person lover;
    }
    
    A = new Person("A");
    B = new Person("B");
    A.lover = B;
    B.lover = A;
    
    A = NULL;
    B = NULL;
    

    所以,计数永远不会为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多