Сможет ли WeakMap спасти меня от утечки памяти для родительских / дочерних отношений?
У меня есть отношения родитель / ребенок, которые выглядят так.
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
, Там еще есть циклическая ссылка.
1 ответ
Нет. Если вы удалите все другие ссылки на parent
а также child
, они будут собирать мусор. Все современные браузеры используют алгоритм разметки и очистки для сбора мусора, с которым циклы не являются проблемой. Вам не нужно использовать WeakMap
(в любом случае это вам не поможет).
Однако, очевидно, если ссылка на parent
или же child
еще где-то существует, никто из них не уйдет.