Скорее полагайтесь на each_object
, чтобы дать статус о живых объектах:
def foo
total = ObjectSpace.each_object(String).count
str = "kiddorails"
puts ObjectSpace.each_object(String).count - total
end
foo
#=> 1
Еще один момент, на который следует обратить внимание: приведенный выше фрагмент кода не является полностью защищенным для предоставления подробных сведений об увеличенных объектах String, поскольку GCвключить и может пнуть в любое время.Я бы предпочел это:
def foo
GC.enable # enables GC if not enabled
GC.start(full_mark: true, immediate_sweep: true, immediate_mark: false) # perform GC if required on current object space
GC.disable # disable GC to get the right facts below
total = ObjectSpace.each_object(String).count
100.times { "kiddorails" }
puts ObjectSpace.each_object(String).count - total
end
foo #=> 100