4.3ゴミ収集


JavaScriptは、非表示の場所でメモリ管理を実行します.
元の値、オブジェクト、関数など、作成したすべてのメモリが消費されます.では、役に立たなくなったものはどう処理されるのでしょうか.次に、JavaScriptエンジンが不要なコンテンツを検索して削除する方法について説明します.
ごみ収集条件
JavaScriptは、メモリ管理を実行するために「達成性」(readability)という概念を使用します.
「到達可能」値は、簡単に言えばアクセスまたは使用可能な値です.到達可能な値はメモリから削除されません.
  • で以下に説明する値は到達可能であるため、削除されない明確な理由はない.
  • 現在の関数の領域変数とパラメータ
  • オーバーラップ関数チェーンの関数に使用される変数とパラメータ
  • グローバル変数
  • その他
    この値をルート(root)と呼びます.
  • 本の参照値またはスクリーンで、ルートが参照できる値が達成可能な値になります.
    オブジェクトがグローバル変数に格納されているとします.オブジェクトの構成が別のオブジェクトを参照する場合、その構成が参照するオブジェクトは到達可能な値になります.このオブジェクトが参照する他のすべてのコンテンツも到達可能であると考えられます.
  • Javascriptエンジンでは、ごみ収集器が絶えず動作します.ゴミ収集器はすべてのオブジェクトを監視し、届かないオブジェクトを削除します.
    単純な例
    // user엔 객체 참조 값이 저장된다.
    let user = {
      name: "John"
    };
    グローバル変数"user"は、{name: "John"}という名前のオブジェクトを参照する.ジョンのプログラム"name"は元の値を保存します.userを別の値で上書きすると、参照は消えます.
    user = null;
    今、ジョンはもう及ばないほどだ.ジョンに近づく方法も参照も消えた.ゴミ収集器は、Johnに格納されているデータを削除し、メモリから削除します.
    2つの参照
    参照がuserからadminにコピーされると仮定する.
    // use엔 객체 참조 값이 저장된다.
    let user = {
      name: "John"
    };
    
    let admin = user;
    そして、上記のように、userを別の値で上書きする.
    user = null;
    グローバル変数adminはオブジェクトJohnにアクセスできるため、Johnはメモリから削除されません.この状態で、adminを別の値(nullなど)で上書きすると、Johnはメモリから削除することができる.
    ないぶアルゴリズム
    「mark-and-sweep」と呼ばれるゴミ収集の既存のアルゴリズムを理解します.
    ゴミ収集には、通常、次の手順に従います.
  • ゴミ収集器はルート情報を収集し、「mark(記憶)」とマークする.
  • 本のディレクトリで参照されているすべてのオブジェクトにアクセスし、「mark」とマークします.
  • とマークされたすべてのオブジェクトにアクセスし、これらのオブジェクトが参照するオブジェクトをマークします.一度にアクセスしたオブジェクトはすべてマークされるため、同じオブジェクトには二度とアクセスしません.
  • 本のディレクトリ内のすべての到達可能オブジェクトまで、上記の手順を繰り返します.
  • タグ付けされていないすべてのオブジェクトをメモリから削除する
  • .
    JAvascriptエンジンは、実行に影響を及ぼさずにゴミ収集を高速化するために、さまざまな最適化技術を採用しています.
    さいてきかぎじゅつ
  • 世代収集(世代別収集)–オブジェクトを新しいオブジェクトと古いオブジェクトに分割します.多くのオブジェクトは作成後すぐに独自の役割を果たし、すぐに役に立たなくなり、これらのオブジェクトは「新しいオブジェクト」に分割されます.ゴミ収集器は、これらのオブジェクトをメモリから攻撃的に削除します.一定時間以上生存したオブジェクトは「古いオブジェクト」として分類され、ゴミ収集器は監視されることは少ない.
  • インクリメンタル・コレクション(漸進的収集)–アクセスが必要なオブジェクトが多い場合は、すべてのオブジェクトに1回のアクセスとタグ付けに多くの時間がかかります.ごみ収集には大量の資源が使われており、運行速度も著しく遅くなっている.このような状況を改善するために、JavaScriptエンジンはゴミ収集を複数の部分に分離し、各部分をそれぞれ実行します.タスクの分離と変更の追跡には追加の作業が必要ですが、長遅延を複数の短遅延に分散できる利点があります.
  • アイドル時間収集(アイドル時間収集):ゴミ収集器は、CPUがアイドル状態にある場合にのみゴミ収集を実行し、実行への影響を最小限に抑える.
  • 概要✔
  • ごみ収集はエンジンによって自動的に実行され、開発者は強制的に実行または阻止することができない.
  • オブジェクトは、到着時にメモリに残ることができます.
  • 参照は、達成できることを意味しない.互いに接続されたオブジェクトが到達できない場合もあります.
  • モダンjavascriptエンジンは、より発展したゴミ収集アルゴリズムを使用しています.