ガベージコレクション (GC) はなぜ必要なのでしょうか?
ガベージコレクションとはガベージ コレクション メカニズムは 廃棄物の発生オブジェクトに参照する変数やプロパティがない場合、そのオブジェクトを操作することはできません。このオブジェクトはゴミです。このようなオブジェクトが多すぎると、大量のメモリ領域を占有し、プログラムの速度が低下します。 例えば: ここで、まず Person 変数を宣言し、この変数はオブジェクト {name: "江流", age: 20} を参照します。次に、この Person 変数を別のオブジェクト {name: "心猿", age: 5000} にポイントします。以前参照していたオブジェクトは、これで役に立たないオブジェクトになり、操作に使用することはできません。このようなオブジェクトはゴミです。 ガベージ オブジェクトが多すぎると、多くのスペースを占有します。ガベージ オブジェクトが解放されないと、システムのパフォーマンスに影響し、プログラムがクラッシュすることもあります。そのため、このメモリ部分を解放するにはガベージ コレクションが必要です。 このプロセスではガベージ コレクションを実行する必要はなく、実行することもできません。 必要なのは、使用されなくなったオブジェクトを null に設定することだけです。 ガベージコレクション戦略JavaScript におけるメモリ管理の主な概念は到達可能性です。大まかに言えば、何らかの方法でアクセスまたは使用できる値はメモリ内に保持する必要があり、アクセスまたは使用できない値はガベージ コレクション メカニズムによってリサイクルされる必要があることを意味します。 JavaScript はシングルスレッド言語であるため、ガベージ コレクション プロセスはリアルタイムで実行されません。ガベージ コレクションが実行されるたびに、プログラムのアプリケーション ロジックが一時停止されます。ガベージ コレクションが完了すると、アプリケーション ロジックが再度実行されます。この動作は完全一時停止と呼ばれ、ガベージ コレクションは一般に CPU がアイドル状態のときに実行されます。 いわゆるガベージを何らかの方法で見つける方法がガベージ コレクションの焦点であるため、次のような一般的なアルゴリズム戦略がありますが、ここでは最初の 2 つについてのみ説明します。
参照カウントタグ戦略的思考:
例えば: a = {とする 名前: 「江劉」 年齢: 20 }; //この時点でオブジェクトの参照カウントは 1 (参照) としてマークされます let b = a; //この時点でオブジェクトの参照カウントは 2 (a、b 参照) とマークされます a = null; //この時点でオブジェクトの参照カウントは 1 としてマークされます ((b 参照)) b = null; //この時点でオブジェクトの参照カウントは 0 としてマークされます (変数参照なし) ... //GCがこのオブジェクトを回収するまで待機します しかし、このアプローチには深刻な問題がある。循環参照である。 循環参照によって生じる問題関数では、オブジェクト A のプロパティはオブジェクト B を指し、オブジェクト B のプロパティはオブジェクト A を指します。関数が実行されると、オブジェクト A と B のカウンターは 0 ではなくなり、通常の GC に影響します。 たとえば、次の例をご覧ください。 関数テスト() { A = new Object(); B = 新しいオブジェクト(); A.ポインタ = B; B.ポインタ = A; } テスト(); オブジェクト A とオブジェクト B のプロパティが相互に参照する場合、参照カウント戦略によれば、それらの参照カウントは両方とも 2 になります。ただし、test() が実行された後、関数が実行された後、関数スコープ内のデータ オブジェクト A と B は GC によって破棄される必要があります。 複数回実行すると、重大なメモリリークが発生します。 回避策関数の最後にnullを設定します // 参照関係を切断します A = null; B = ヌル; 参照カウントアルゴリズムの利点と欠点アドバンテージ:
欠点:
マークアンドスイープアルゴリズムコアアイデアマーキングとクリアの 2 つのフェーズで完了します。 おおよそのプロセス:
マークスイープアルゴリズムの利点と欠点アドバンテージ:
欠点: ガベージ コレクション後、残りのオブジェクトのメモリ位置は変更されず、空きメモリ領域が不連続になります。これによりメモリの断片化が発生し、残りのスペースがブロック全体ではなくなるため、メモリの割り当てが問題になります。 マークスイープアルゴリズムMark-Compact アルゴリズムは、この問題を効果的に解決できます。Mark-Compact アルゴリズムは、マークを付けた後、クリーンアップする必要のないオブジェクトをメモリの一方の端に移動し、最後に境界でメモリをクリーンアップします。 V8エンジンのガベージコレクション
オブジェクトごとに異なるアルゴリズムを使用します。 (1)新世代:オブジェクトの生存時間が短くなります。新しいオブジェクト、または一度だけガベージ コレクションされたオブジェクト。 (2)古い世代:オブジェクトはより長く存続する。 1 回以上のガベージ コレクションを経たオブジェクト。 新世代のオブジェクトのリサイクル新世代のオブジェクトは、主にコピー アルゴリズム (Scavenge アルゴリズム) とマーク スイープ アルゴリズムを使用してリサイクルされます。 Scavenge アルゴリズムの具体的な実装では、主に Cheney アルゴリズムが使用されます。 オブジェクト昇格メカニズムGC ラウンドを生き残った新世代を昇格させる必要があります。 古い世代のオブジェクトのリサイクルマークスイープ、マークコンパクト、増分マークの各アルゴリズムは、主に古い世代のオブジェクトをリサイクルするために使用されます。マークスイープアルゴリズムは主に使用され、マークコンパクトアルゴリズムはメモリ割り当てが不十分な場合にのみ使用されます。
参考資料:JS ガベージコレクションメカニズム JavaScript GC ガベージコレクションのメカニズム 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
Linux で Go 環境を構築するのは非常に簡単です。 1. go1.2.1.linux-386....
目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...
目次1. 手ぶれ補正機能とは何ですか? 1. なぜ手ぶれ補正機能が必要なのでしょうか? 2. 手ぶれ...
HTML と CSS で、ボタンの色を設定したいとします。 目的の効果は得られますが、プロセスはかな...
CSS3 を学ぶということは、新しい機能と基本的な理論に慣れることを意味します。この記事では、ケー...
Linux は、システム内のデバイス、インターフェース、ファイル、スタートアップ、アプリケーション ...
必要:公式サイトのリソースサーバーは確かに1つのインスタンスでは使えず、複数のインスタンスを一緒に使...
仮想化1. 環境セントオス7.3 selinuxとファイアウォールを無効にする2. 仮想化環境の構成...
目次プロジェクトディレクトリDockerファイルファイルの展開画像を生成するコンテナを起動するウェブ...
前の 2 つの章を終えて、ボタンのフローティング アニメーションについて新たな理解が得られましたか?...
人気があり強力な Apache Web サーバーで 2 つ以上のサイトをホストする方法。前回の記事で...
RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...
ダウンロードしてインストールします。まず、システムに MySQL または MariaDB があるかど...
日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...
ビジネスを想定: 2位の従業員の給与情報を見るデータベースを作成する emps が存在する場合はデー...