详细介绍 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();
广告