Javascriptがガベージコレクションをいつ実行するかを制御する方法はありますか? Web サイトの円滑な運用を確保するために、特定の時間にガベージ コレクションを実行できるようにしたい
6 に答える
残念ながら、ガベージ コレクションがいつ行われるかを制御する方法はありませんが、オブジェクトを適切に構成することで、ガベージ コレクションがどれだけ迅速かつクリーンに行われるかを制御できます。Mozilla Dev Netでこれらのドキュメントをご覧ください。
このアルゴリズムは、ルートと呼ばれる一連のオブジェクトの知識を前提としています (JavaScript では、ルートはグローバル オブジェクトです)。定期的に、ガベージ コレクターはこれらのルートから開始し、これらのルートから参照されるすべてのオブジェクトを検索し、次にこれらから参照されるすべてのオブジェクトを検索します。ルートから開始して、ガベージ コレクターは到達可能なすべてのオブジェクトを検索し、非到達可能なオブジェクト。
このアルゴリズムは、「オブジェクトの参照がゼロ」になると、このオブジェクトが到達不能になるため、前のアルゴリズムよりも優れています。サイクルで見たように、その逆は当てはまりません。
オブジェクトを GC するまで、すべてのオブジェクトへの参照を保持しないのはなぜですか?
var delayed_gc_objects = [];
function delayGC(obj) { // keeps reference alive
return delayed_gc_objects[delayed_gc_objects.length] = obj;
}
function resumeGC() { // kills references, letting them be GCd
delayed_gc_objects.length = 0;
}
次のようないくつかの変更を実行して、メモリの使用を改善できます。
- ループに変数を設定しないでください
- グローバル変数と関数の使用を避けます。あなたが出るまで、彼らは記憶の一部を取ります
JavaScript はガベージ コレクション言語です。つまり、コードの実行中に必要なメモリを管理するのは実行環境です。JavaScript のガベージ コレクションの最も一般的な形式は、マーク アンド スイープと呼ばれます。あまり一般的ではない 2 番目のタイプのガベージ コレクションは、参照カウントです。アイデアは、すべての値がそれに対して行われた参照の数を追跡することです
GC はこれらのアルゴリズムに従います。たとえ GC をトリガーできたとしても、すぐに実行されるとは限りません。マークしているだけです。
ガベージ コレクション (GC) は、不要になったオブジェクトを削除することによる自動メモリ管理の一種です。
メモリを扱うプロセスは次の手順に従います。
1 - 必要なメモリ空間を割り当てます
2 - いくつかの処理を行う
3 - このメモリ領域を解放します
不要になったオブジェクトを検出するために使用される主なアルゴリズムは 2 つあります。
参照カウント ガベージ コレクション: このアルゴリズムは、「オブジェクトはもう必要ありません」の定義を「オブジェクトを参照する他のオブジェクトがない」に減らします。参照ポイントがない場合、オブジェクトは削除されます。
マーク アンド スイープ アルゴリズム: 各オブジェクトをルート ソースに接続します。どのオブジェクトもルートまたは他のオブジェクトに接続しません。このオブジェクトは削除されます。
現在、2 番目のアルゴリズムを使用する最新のブラウザー。