JavaScript におけるガベージ コレクション (ガベージ コレクション) は、他のオブジェクトが使用できるようにメモリ領域を解放するために、使用されなくなったオブジェクトを検出してリサイクルする役割を担う自動メモリ管理メカニズムです。この記事では、JavaScript のガベージ コレクション メカニズムを詳しく紹介し、対応するソース コードの例を示します。
JavaScript のガベージ コレクション メカニズムは、主に、参照カウントとマーク クリーニングという 2 つの中心的な概念に依存しています。
- 参照カウント: これは、参照された回数を追跡することによって各オブジェクトをリサイクルするかどうかを決定する単純なガベージ コレクション アルゴリズムです。オブジェクトの作成時の参照カウントは 1 です。参照がオブジェクトを指す場合、参照カウントは 1 ずつ増加します。参照が期限切れになるか、別の値が割り当てられると、参照カウントは 1 ずつ減少します。参照カウントが 0 の場合、オブジェクトは参照されなくなり、リサイクルできることを意味します。
ただし、参照カウント アルゴリズムには循環参照という問題があります。2 つ以上のオブジェクトが相互に参照すると、それらの参照カウントが 0 に達することがなく、メモリ リークが発生します。この問題を解決するために、JavaScript エンジンにはマーク アンド スイープ アルゴリズムが導入されました。
- マーク アンド スイープ: マーク アンド スイープ アルゴリズムは、ルート オブジェクト (通常はグローバル オブジェクト) を開始点として使用し、オブジェクトの参照関係をたどって、アクセス可能なすべてのオブジェクトをマークします。マーキング フェーズが終了すると、マークされていないオブジェクトはアクセスできないガベージ オブジェクトとなり、リサイクルできます。
以下は、JavaScript でのガベージ コレクション プロセスを示すサンプル コードです。
// 创建对象
let obj1