2.0.0あけましておめでとうございます。ビットマップマーキングGCをRuby2.0向けに作りました。無事に動いてることを確認してます。original全体的に実行時間は若干遅くなるようです。マークでRVALUEのフラグを立てるだけだったのが、ビットマップ上のフラグを立てるようになるので遅くなるのはしょうがないかなと...。skkzipcodeビットマップマーキングではマークでRVALUEに対して書き込みがなくなるので、Linuxで複数の子プロセスを実行した場合にも無駄なCoWが発生せず、総メモリ使用量が少なくなるという利点があります。skkzipcodeというサンプルプログラムで上記の点を確認しました。生成した子プロセスで親プロセスと共有したデータを利用します。kbPROCESS_CNTは子プロセスの数、SHARED_TOTALは子プロセスで利用している共有メモリ量、PRIV_TOTALは私有メモリ量です。bmapの方が共有メモリを沢山使っていることがわかり、私有メモリ使用量も少なくなっています。実装について簡単にまとめます。heaps_slotをヒープブロックに埋め込んだLinuxでfork()を使わないようなプログラムに対してはビットマップマーキングの恩恵はありません。CRubyで並列プログラミングしようとするときにはfork()を使って云々するライブラリがけっこう多いので(例えばpassengerとか...)そういうものに対しては結構効くはずです。GCの実行時間もそれほど遅くなりませんので、fork()を使わないプログラムでもそれほど問題にならないと思っています。2.0.0あけましておめでとうございます。ビットマップマーキングGCをRuby2.0向けに作りました。無事に動いてることを確認してます。https://gist.github.com/1542547全体的に実行時間は若干遅くなるようです。マークでRVALUEのフラグを立てるだけだったのが、ビットマップ上のフラグを立てるようになるので遅くなるのはしょうがないかなと...。skkzipcodeビットマップマーキングではマークでRVALUEに対して書き込みがなくなるので、Linuxで複数の子プロセスを実行した場合にも無駄なCoWが発生せず、総メモリ使用量が少なくなるという利点があります。skkzipcodeというサンプルプログラムで上記の点を確認しました。生成した子プロセスで親プロセスと共有したデータを利用します。kbPROCESS_CNTは子プロセスの数、SHARED_TOTALは子プロセスで利用している共有メモリ量、PRIV_TOTALは私有メモリ量です。bmapの方が共有メモリを沢山使っていることがわかり、私有メモリ使用量も少なくなっています。実装について簡単にまとめます。heaps_slotをヒープブロックに埋め込んだLinuxでfork()を使わないようなプログラムに対してはビットマップマーキングの恩恵はありません。CRubyで並列プログラミングしようとするときにはfork()を使って云々するライブラリがけっこう多いので(例えばpassengerとか...)そういうものに対しては結構効くはずです。GCの実行時間もそれほど遅くなりませんので、fork()を使わないプログラムでもそれほど問題にならないと思っています。