WeakMap会保存我的父/子关系的内存泄漏吗?

时间:2016-05-05 01:08:22

标签: javascript memory-leaks ecmascript-6 weakmap

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

parent.children = [child];
child.parent = parent;
  1. 当删除对parentchild的所有其他引用时,是否会导致内存泄漏?只有剩下的参考文献才会互相参与。

  2. 如果由于循环引用而导致内存泄漏,WeakMap会保存吗?

  3. 使用WeakMap

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

    我想它不会,因为parentMap引用了parentparent引用了child。仍有循环参考。

1 个答案:

答案 0 :(得分:3)

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

但是,显然,如果某个地方仍然存在对parentchild的引用,那么它们都不会存在。