ホームページ  >  記事  >  ウェブフロントエンド  >  jsのガベージコレクションの仕組みを数秒で理解する

jsのガベージコレクションの仕組みを数秒で理解する

hzc
hzc転載
2020-06-13 09:49:412968ブラウズ

はじめに


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 でメモリを管理するための提案


  • グローバル変数の使用をできるだけ少なくする

  • 可能な限り変数への参照を手動でクリアします

読んでいただきありがとうございます。

WeChat でコミュニケーションする必要がある場合は、メッセージを残してください。

推奨チュートリアル: 「

JS チュートリアル

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

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