ホームページ >ウェブフロントエンド >jsチュートリアル >JS ガベージ コレクション メカニズムとメモリ管理の簡単な分析

JS ガベージ コレクション メカニズムとメモリ管理の簡単な分析

零到壹度
零到壹度オリジナル
2018-04-04 14:36:241194ブラウズ

この記事は主に JS のガベージ コレクションのメカニズムとメモリ管理の簡単な分析を紹介しています。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして一緒に見てみましょう

ガベージ コレクション

JavaScript のガベージ コレクション メカニズムは非常にシンプルです。使用されなくなった変数を見つけて解放します。

ローカル変数は実行中にのみ存在します。関数の実行後は、ローカル変数が存在する必要はありません。ただし、すべての変数を判断するのはそれほど簡単ではないため、これらの変数をリサイクルするにはいくつかのメソッドを使用する必要があります

1 マークのクリア:

JavaScript で最もよく使用されるガベージ コレクションの方法は、変数が環境に入ると、その変数は「環境に入る」としてマークされ、その変数はその環境から出ると「出る」としてマークされます。一般的に、変数にアクセスする方法がないため、変数をクリアするのは環境によってマークされた変数を残すだけです。その後、ガベージ コレクターがメモリ クリーンアップ作業を完了します。

2 参照カウント:

この方法はあまり一般的ではありません。参照カウントの意味は、参照された値を記録することです。参照された回数が 0 になると、その値にアクセスする方法がなくなったことを意味します。

しかし、参照カウントには問題があります。例: この例では、Objecta と ObjectB が相互に引用されています。独自の属性、つまり、これら 2 つのオブジェクトの参照は 2 です。マークアンドスイープ戦略を使用する実装では、関数の実行後に両方のオブジェクトがスコープ外になるため、この相互参照は問題になりません。ただし、参照カウント戦略を使用する実装では、参照の数が 0 になることはないため、objectA と objectB は関数の実行後も存在し続けます。この関数が複数回呼び出される場合、大量のメモリがリサイクルされません

このような問題を回避するには、循環参照を排除するために使用されない場合は null を設定する必要があります


メモリ管理:


Web ブラウザに割り当てられる利用可能なメモリの量は、通常、デスクトップ アプリケーションに割り当てられるメモリの量よりも少ないことは誰もが知っています。この目的は主にセキュリティ上の理由で、JavaScript を実行している Web ページがシステム メモリをすべて使い切ってシステムがクラッシュするのを防ぐことです。メモリ制限の問題は、変数へのメモリの割り当てだけでなく、コール スタックやスレッド内で同時に実行できるステートメントの数にも影響します。

したがって、ページが占有するメモリ量を最小限に抑えることで、パフォーマンスを向上させることができます。メモリ使用量を最適化する最善の方法は、コードの実行に必要なデータのみを保存することです。データが役に立たなくなったら、その値を null に設定して参照を解放することをお勧めします。これを逆参照と呼びます。このアプローチは、ほとんどのグローバル変数とグローバル オブジェクトのプロパティに適用されます。次の例に示すように、ローカル変数は、実行環境を離れるときに自動的に逆参照されます。


function problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}

値の逆参照は、その値が占有しているメモリを自動的にリサイクルすることを意味するわけではありません。逆参照が実際に行うことは、次回実行時にガベージ コレクターによって再利用できるように、実行環境から値を取り出すことです。


関連する推奨事項:


Javaのガベージコレクションメカニズム、メモリ管理

JSのガベージコレクションメカニズムとメモリ割り当て

JavaScriptのガベージコレクションメカニズムとメモリリークの問題

以上がJS ガベージ コレクション メカニズムとメモリ管理の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。