Ruby でオブジェクトが GC されるタイミングを調べています。
実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている ObjectSpace.define_finalizer
の良い例の最後に sleep 100
を追加した次のようなコードを書いて実行してみたのですが、sleep 100
が終わるまで Bar.callback
が実行されません。Bar.new
で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 GC.start
で GC されないのでしょうか。
#!/usr/bin/env ruby
class Bar
def Bar.callback
proc {
puts "bar"
}
end
def initialize
ObjectSpace.define_finalizer(self, Bar.callback)
end
end
Bar.new
GC.start
sleep 100
実験した Ruby は以下の 2 つで、結果は同じでした。
$ ruby1.8 -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
$ ruby1.9.1 -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]