详细说明有关JavaScript中引用计数垃圾收集的信息吗?

 引用计数垃圾收集

这是最简单的垃圾回收算法,该算法查找那些没有引用的对象,如果对象没有附加引用,则有资格进行垃圾回收,以下示例说明了垃圾回收。

示例

var obj = {
      x: { y: 2 }
         };
         //已创建2个对象。一个被另一个引用为其属性之一。
         //显然,没有一个可以被垃圾收集
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();