Garbage Collection



JAvascriptは見えない場所でメモリ管理を行い、コードを書く過程で役に立たないものを見つけたらどう処理しますか?

✨ Garbage Collection


不要なオブジェクトが占めるメモリを自動的に解除することを指します.
Javascriptでは、ゴミ収集は도달 가능성というコンセプトでメモリ管理されています.
  • rootの値
  • 現在の関数の領域変数とパラメータ
  • 関数チェーンの関数に使用するパラメータとパラメータを重ねる
  • グローバル変数など
  • ルート参照の値またはループ参照可能な値
  • 例として理解


    👇 次のような対象があると言います.
    let seohee = {
      hobby : "dance",
      age : 24
    };
    ここでオブジェクトにnullを割り当てます.
    seohee = null;
    console.log(seohee);		// undefined
    対象に到達できない状態になる.
    ただし、元のオブジェクトのメモリを解放する前に参照するオブジェクトを作成し、メモリを解放すると、,!
    let cloneSeohee = seohee;
    seohee = null;
    console.log(seohee); 		// undefined
    console.log(cloneSeohee);	// {hobby: 'dance', age: 24}
    元のオブジェクトとしては参照できませんが、新しく作成したオブジェクトは参照できます.

    物品取引例

    function transaction(seller, buyer) {
      seller.receive = buyer;
      buyer.giveAway = seller;
    
      return {
        구매자: buyer,
        판매자: seller
      }
    }
    
    let 고데기 = transaction({
      name: "seohee"
    }, {
      name: "nayeon"
    });
    Transaction(トランザクション)関数は,パラメータとして受信した2つのオブジェクトを相互参照してトランザクションを行う.
    ヘアアイロン商品ですべてのオブジェクトに届くようになりました.
    👇 ここから2つの参照を削除します.
    delete 고데기.구매자; 
    delete 고데기.판매자.receive;
    ヘア?アイロン売り手に近づくしかない.
    console.log(고데기.판매자);	//	seohee
    関数全体にnullを指定すると、
    transaction = null;
    届かない島になります.

    ✨ Mark and Sweep


    JavaScriptエンジンでは、ゴミ収集器が実行する内部アルゴリズムをmark-and-sweepと呼ぶ.
    到達可能なオブジェクト마크(mark)その他の値제거(sweep)の概念.

    アルゴリズムの進捗


  • ごみ収集器はルート情報を収集しmark(記憶)とマークする

  • ルート参照のすべてのオブジェクトにアクセスし、

  • すべてのタグ付きオブジェクトと、参照されているオブジェクトにアクセスします.

  • 一度にアクセスするオブジェクトはすべてmarkなので、同じオブジェクトには二度とアクセスしません.

  • ルートディレクトリからすべての到達可能なオブジェクトにアクセスするまで、上記の手順を繰り返します.

  • マークされていないすべてのオブジェクトをメモリから削除します.
  • 👇 結果は図のようになります.

    赤枠では届かないので、ゴミ収集器でクリアされます.

    🌈 n/a.結論


    ごみ収集の操作方法はブラウザのJavaScriptエンジンに依存するが、2012年を基準に、すべての最新のブラウザはごみ収集にmark-and-sweepアルゴリズムを使用している.
    📚 学習の参考資料📚
  • コアJavaScript:ゴミ収集
  • [モダンJS:Core]ごみ収集