我和我的同事正在寻找Ruby on Rails应用程序中的内存泄漏,我们有一些初步指标,代码如下可能是罪魁祸首:
module Foo
class Bar
def self.example
@widgets ||= ::Widget::Factory.new
end
end
end
我们的预感是因为self.example
是一个类方法,它可能无法正确地回收Widget::Factory
的memoized实例,它实际上利用了广泛的缓存。
我们相信,每当我们的一名后勤工作人员运行时,这就会导致内存泄漏。它似乎是在调动Foo::Bar
的实例,但从不释放由Widget::Factory
创建的对象。
有没有人对MRI的GC如何适用于这样的用例有任何见解,或者这只是一个红鲱鱼?