From: "ara.t.howard" Date: 2007-09-26T01:01:57+09:00 Subject: ObjectSpace.define_finalizer and memory leaks i don't think i've ever noticed this behaviour: cfp:~ > cat a.rb class C def self.count c = 0 ObjectSpace.each_object do |object| c += 1 if self === object rescue next end c end end loop do c = nil ### try with and without this!!!!!!!!!!!!!! (2 ** 16).times do c = C.new object_id = c.object_id ObjectSpace.define_finalizer(c){ :nothing } end puts "before: #{ C.count }" GC.start puts "after: #{ C.count }" puts end run both ways. notice that, without the prior declaration of c, the code leaks like crazy: the finalizer itself holds a reference to the object and prevents it being reaped. i don't think i've ever noticed this behavior before. i understand it - but can this be correct? it seems like you should be able to define a finalizer on any object without preventing it from being gc'd! cheers. a @ http://drawohara.com/ -- we can deny everything, except that we have the possibility of being better. simply reflect on that. h.h. the 14th dalai lama