【マークアンドスイープ】
マーク&スイープ とは?
💡 迷子のオモチャを見つけ出す、お片付けの二段階作戦
📌 このページのポイント
マーク&スイープって何?名前がお掃除っぽいね!
まさにお掃除の仕組みだよ。部屋の中で「使っているもの」にシールを貼って(マーク)、シールがないものをゴミ袋に入れる(スイープ)というイメージだね。
「使っている」ってどうやって判断するの?
参照カウントとの違いは何なの?
参照カウントは「自分を参照している数」を常に管理するけど、マーク&スイープは定期的にまとめてチェックするんだ。大きな違いは循環参照を正しく回収できること。AとBがお互いだけを参照していても、ルートからたどれなければ回収されるよ。
それはすごい!でもまとめてチェックするって、その間プログラムは動けないの?
じゃあ現代の言語ではどうやって改善しているの?
マーク&スイープ以外のGC方式もあるの?
まとめ:ざっくりこれだけ覚えればOK!
「マーク&スイープ」って出てきたら「使っているものに印を付けて、印のないものを捨てるGCの基本方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Mark-and-Sweep」 = 印付けと掃き掃除
💬 「mark(印を付ける)」してから「sweep(掃く)」という2ステップがそのまま名前になっているよ