在以下代码中:
这里的终结器从未被调用,也没有输出。我本以为垃圾回收器会收集已取消引用的ex。为什么GC.start不能强制回收ex并立即导致终结器被调用?
class ExampleClass
def initialize
ObjectSpace.define_finalizer(self, proc{puts 'dead'})
end
end
ex = ExampleClass.new
ex = nil
GC.start
while true
# the while loop is to prevent the program from terminate
# if the program does terminate, the finalizer gets called in the end like expected
end
这里的终结器从未被调用,也没有输出。我本以为垃圾回收器会收集已取消引用的ex。为什么GC.start不能强制回收ex并立即导致终结器被调用?
while true end
替换为exit
,我会看到dead
打印。 我正在使用Ruby 2.5.0-dev。 顺便问一下,你在哪个平台上? - max pleanerGC.start
时,dead
没有正确打印。我在那里放了一个while循环来显示程序不会终止。 - aoiee