详细介绍 JavaScript 中的引用计数垃圾回收?


 引用计数垃圾回收

这是最简单的垃圾回收算法。此算法寻找那些没有任何引用剩下的对象。如果一个对象没有引用,则它有资格进行垃圾回收。垃圾回收在下面的示例中进行了说明。

示例

var obj = {
      x: { y: 2 }
         };
         // 2 objects created. One is referenced by the other as one of its properties.
         // Obviously, none can be garbage-collected
obj = 1; // what was the 'x' property of the object originally in obj
         // has zero references to it. It can be garbage collected.

限制

在**循环**方面,引用计数垃圾回收存在限制,并在下面的示例中进行了解释。

示例

在以下示例中,创建了两个对象并相互引用,从而创建了一个循环。函数调用后,它们将超出范围,因此它们实际上是无用的,可以被释放。但是,引用计数算法认为,由于这两个对象中至少有一个被引用了一次,因此没有一个是垃圾回收的。

function f() {
var obj1 = {};
var obj2 = {};
obj1.p = obj2; // o1 references o2
obj2.p = obj1; // o2 references o1. This creates a cycle.
}
f();

更新于: 30-7-2019

3K + 次浏览

开启你的 职业生涯

完成课程认证

开始
广告