普段プログラムを書いていると、あまり気にすることのないGCの動きについて知りたくなったので、調べた内容をまとめてみました。 GC自体は様々な言語に導入されており、アルゴリズムもそれぞれですが今回はRuby(C Ruby)のGCについて書いていきます。 RubyのGCアルゴリズムについて Rubyでは元来「mark&sweep」というアルゴリズムでGCが動いておりました。 このmark&sweepでは 1. マークフェーズ 2. スイープフェーズ の2つのフェーズがあります。 まずマークフェーズでは、rootオブジェクトから参照のあるオブジェクトのみにマークしていきます。 スイープフェーズではマークのついていない、つまり使われていないオブジェクトを解放していきます。 この2つのフェーズを行うだけのシンプルな手法です。 ですが、この手法ではスイープの際に全てのオブジェクトに対してマークがあるか