我有一个看起来像这样的父/子关系。
parent.children = [child];
child.parent = parent;
当删除对parent
和child
的所有其他引用时,是否会导致内存泄漏?只有剩下的参考文献才会互相参与。
如果由于循环引用而导致内存泄漏,WeakMap
会保存吗?
使用WeakMap
,
var parentMap = new WeakMap();
parent.children = [child];
parentMap.set(child, parent);
我想它不会,因为parentMap
引用了parent
,parent
引用了child
。仍有循环参考。
答案 0 :(得分:3)
没有。如果删除对parent
和child
的所有其他引用,它们将被垃圾回收。
所有现代浏览器都使用mark-and-sweep算法进行垃圾收集,循环不是问题。
您不需要使用WeakMap
(无论如何它都不会帮助您。)
但是,显然,如果某个地方仍然存在对parent
或child
的引用,那么它们都不会存在。