私はjavascriptの二重リンクリストの迅速で汚い実装を書きました。複数の(連続した)ノードを一度に削除できるようにしたいと思いました。削除する最も外側のノードの端を切断するだけで十分ですか、それとも各ノードを個別に削除する必要がありますか。javascriptのガベージコレクションを正しく理解していれば、それらがまだ相互に接続されていても、それらの連続するノードを指すものがなくなったら、それらはガベージコレクターによって処理される必要があります。これを自分でテストまたは検証する方法を誰かに教えてもらえれば、それも非常にありがたいです。
1 に答える
MDNによると:
2012 年現在、すべての最新のブラウザーには、マーク アンド スイープ ガベージ コレクターが付属しています。過去数年間に JavaScript ガベージ コレクション (世代別/増分/同時/並列ガベージ コレクション) の分野で行われたすべての改善は、このアルゴリズムの実装の改善ですが、ガベージ コレクション アルゴリズム自体の改善や when の定義の削減ではありません。 「オブジェクトはもう必要ありません」
マーク アンド スイープ アルゴリズムは、ルート オブジェクトから開始し、到達可能なすべてのオブジェクトを見つけてから、到達不可能なオブジェクトをすべて収集するため、これらのブラウザではノードを切断しても問題ありません。古いブラウザーは参照カウントを使用します。つまり、オブジェクトへの参照が 0 になった場合にのみオブジェクトが収集されるため、この場合、二重にリンクされたリストのサイクルが問題になります。次に、何らかの方法で連続するノードのサイクルをカットする必要があります (参照を null に設定する、キーワードを削除するなど)。
したがって、最新のブラウザー向けに開発している場合は問題ありませんが、IE6/7 などのブラウザーとの互換性を取り戻したい場合は、もう少し複雑なソリューションが必要になります (常にそうですよね...)