0

こんな感じの親子関係です。

parent.children = [child];
child.parent = parent;
  1. parentおよびへの他のすべての参照childが削除されると、メモリ リークが発生しますか? 残っている参照のみが相互になります。

  2. 循環参照によるメモリリークが発生する場合、私をWeakMap救ってくれますか?

を使用してWeakMap

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

parentMapそれ以来、への参照があり、 への参照があるparentparent思いますchild。まだ循環参照があります。

4

1 に答える 1

3

いいえ。 および への他のすべての参照を削除するparentchild、それらはガベージ コレクションの対象になります。最新のブラウザはすべて、サイクルが問題にならないガベージ コレクションにマーク アンド スイープアルゴリズムを使用しています。a を使用する必要はありませんWeakMap(とにかく、これは役に立ちません)。

ただし、明らかに、parentまたはへの参照がchildまだどこかに存在する場合、それらのいずれも移動しません。

于 2016-05-05T01:15:03.957 に答える