Сможет ли WeakMap спасти меня от утечки памяти для родительских / дочерних отношений?

У меня есть отношения родитель / ребенок, которые выглядят так.

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, Там еще есть циклическая ссылка.

1 ответ

Решение

Нет. Если вы удалите все другие ссылки на parent а также child, они будут собирать мусор. Все современные браузеры используют алгоритм разметки и очистки для сбора мусора, с которым циклы не являются проблемой. Вам не нужно использовать WeakMap (в любом случае это вам не поможет).

Однако, очевидно, если ссылка на parent или же child еще где-то существует, никто из них не уйдет.

Другие вопросы по тегам