ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript ガベージ コレクションをすぐに理解する

JavaScript ガベージ コレクションをすぐに理解する

Guanhui
Guanhui転載
2020-05-25 09:38:002168ブラウズ

JavaScript ガベージ コレクションをすぐに理解する

序文

JS には自動ガベージ コレクション メカニズムがあります。言い換えると、実行環境はコードの実行中に使用されるメモリを管理します。

JS ガベージ コレクションの原理

実行環境は、使用されなくなった変数を見つけて、それらが占有しているメモリを解放します。 。

JS ガベージ コレクション戦略

マークのクリア

変数が環境に入ると、この変数を「環境に入る」としてマークし、変数が環境から出るときは「環境から出る」としてマークします。

変数をマークする方法は、特定の実装によって異なります。たとえば、「環境に入る」変数リストと「環境から出る」変数リストを使用して、どの変数が変更されたかを追跡できます。

タグの削除を使用したブラウザには、IE、Firefox、Chrome などがあります。

参照カウント

これは、あまり一般的ではないガベージ コレクション戦略であり、各値が参照された回数を追跡します。

変数 a が宣言され、その変数に参照型の値 ({name:'cc'}) が割り当てられている場合、この値への参照の数は 1 です。 '}) が別の変数 b に代入されると、この値への参照の数が 1 ずつ増加します。逆に、a に値 {name:'xx'} が割り当てられている場合、値 {name:'cc'} への参照の数は 1 減ります。値 {name:'cc'} への参照の数が 0 になると、値 {name:'cc'} にアクセスする方法がなくなったことを意味するため、値 {name:'cc'} が占有しているメモリ領域をリサイクルできます。このようにして、ガベージ コレクターが動作すると、値 {name:'cc'} が占有するメモリ領域がリサイクルされます。

この方法は Netscape Navigator 3.0 で使用されていますが、循環参照という重大な問題があります。

function circleReferenceProbem(){
  let objectA = new Object()
  let objectB = new Object()
  objectA.someOtherObject = objectB
  objectB.anotherObject = objectA
}

この関数の実行後、これら 2 つの参照値の参照数が 0 になることはないため、ガベージ コレクターはそれらが占有しているメモリ領域を再利用することはありません。

JS ガベージ コレクターのパフォーマンス

JS ガベージ コレクターは 1 サイクルおきにガベージ コレクションを実行するためです。

変数に割り当てられたメモリの量が大きくない場合、ガベージ コレクターのリサイクル作業負荷は大きくなりません。ただし、ガベージ コレクターの負荷が大きすぎると、遅延が発生する可能性があります。

JS でのメモリ管理に関する提案

1. グローバル変数の使用はできるだけ少なくする

2. 手動で変数をクリアする可能な限り参照

推奨チュートリアル: 「JS チュートリアル

」###

以上がJavaScript ガベージ コレクションをすぐに理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。