CS) マーク&スイープアルゴリズム

マーク&スイープアルゴリズム

Info

ガベージコレクション(Garbage Collection) の手法の一つで、
メモリ上でこれ以上参照されなくなったオブジェクトを見つけ出し、メモリを回収する方法

Mark

ルートオブジェクトから開始し、到達可能なすべてのオブジェクトを見つけてマークする

  • オブジェクト生成:0でマーク
  • すべてのルートからグラフ探索:1でマーク

ルートオブジェクト

ガベージコレクションにおいて「開始点」の役割を果たし、プログラムから直接アクセス可能なオブジェクトの集合

  • スタック上の変数
  • グローバルオブジェクトおよび変数
  • レジスタに保存された値

Sweep

マークされていないオブジェクト(つまり、これ以上到達できないオブジェクト)をメモリから削除する

  • 0でマークされたオブジェクトの整理
  • すべてのオブジェクトのマーキングビットを初期化(Markフェーズで再び1に変更される)

短所

  • ガベージコレクション実行中はプログラムの実行が一時停止する
  • 断片化問題が発生する
    • 使用可能なメモリ空間が細かく分断され、デフラグメンテーションが必要になる

Reference


Post
Category
Series