名古屋Ruby会議01に参加
10/10に開催された名古屋Ruby会議01に参加してきました。
久しぶりにいろいろな人にお会いできて楽しかったです。
いろいろな話がありましたが、笹田さんの「Rubyのメモリ管理の改善」の話が大学の講義のノリで異彩を放っていました。これまでに提案されたRubyのGCの改善手法の話が主だったのですが、Lazy Sweepがシンプルだけど効果がありそうだと思いました。Sweep(メモリを解放)するフェーズを一気に行わないで分割して行う事でプログラムが長い間止まるのを防止させる手法だそうです。コンカレントGCの一種?。
Rubyはオブジェクトのアドレスのリスト(heap)をリスト(heaps)で管理しているので、heapsまとめてじゃなくてheapごとにSweepすればいいよねという話になります。Ruby1.8ではheapごとにサイズが異なるが、Ruby1.9ではheapのサイズを同じにしたみたいな話をしていました。細かい数字は覚えてないのですがRuby1.9のソースをCSNagoyaで読んだときにはheapのサイズが違っていた気がしたので、気になってRubyのGCのコードをちょっと眺めてみました。最新のソースはheapの長さ固定でした。前読んだときはheapsのサイズを大きくする辺りを間違えてよんでたのかなぁ。Lazy Sweepは1年以上前に実装されて、何かしらの理由で取りやめになったみたいでした。