0

我有一个看起来像这样的父/子关系。

parent.children = [child];
child.parent = parent;
  1. parent当所有其他对和的引用child都被删除时,这会导致内存泄漏吗?只有剩余的引用才会相互引用。

  2. 如果会因为循环引用导致内存泄漏,会WeakMap救我吗?

使用WeakMap,

var parentMap = new WeakMap();
parent.children = [child];
parentMap.set(child, parent);

我想它不会从那以后,parentMap有一个参考parent,并且parent有一个参考child。还有一个循环引用。

4

1 回答 1

3

不会。如果您删除所有其他对parentand的引用child,它们将被垃圾回收。所有现代浏览器都使用标记和清除算法进行垃圾收集,循环不是问题。您不需要使用 a WeakMap(无论如何它对您没有帮助)。

然而,很明显,如果对其中一个的引用parentchild仍然存在于某处,它们都不会消失。

于 2016-05-05T01:15:03.957 回答