2

我和我的同事正在寻找我们的 Ruby on Rails 应用程序中的内存泄漏,我们有一些初步迹象表明类似于以下代码可能是罪魁祸首:

module Foo
  class Bar
    def self.example
      @widgets ||= ::Widget::Factory.new
    end
  end
end

我们的预感是,因为self.example它是一个类方法,它可能无法正确地垃圾收集 memoized 的实例Widget::Factory,它本身利用了广泛的缓存。

我们相信,每次运行我们的后台工作人员时,都会导致内存泄漏。它似乎正在启动一个实例,Foo::Bar但从未解除分配由Widget::Factory.

有没有人知道 MRI 的 GC 如何在这样的用例中工作,或者这只是一个红鲱鱼?

4

0 回答 0