WeakMap 会不会让我免于 parent / child 关系的内存泄漏?
Will WeakMap save me from memory leak for parent / child relationship?
我有一个 parent / child 关系,看起来像这样。
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
。还是有循环引用。
没有。如果您删除对 parent
和 child
的所有其他引用,它们将被垃圾回收。
所有现代浏览器都使用 mark-and-sweep 算法进行垃圾回收,循环不是问题。
您不需要使用 WeakMap
(无论如何它不会帮助您)。
但是,显然,如果对 parent
或 child
的引用仍然存在于某处,则其中的 none 将会消失。
我有一个 parent / child 关系,看起来像这样。
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
。还是有循环引用。
没有。如果您删除对 parent
和 child
的所有其他引用,它们将被垃圾回收。
所有现代浏览器都使用 mark-and-sweep 算法进行垃圾回收,循环不是问题。
您不需要使用 WeakMap
(无论如何它不会帮助您)。
但是,显然,如果对 parent
或 child
的引用仍然存在于某处,则其中的 none 将会消失。