为什么ActionController::Metal会泄漏内存?



我有以下类:


class Myclass < ActionController::Metal
  def myaction
    huge_object.do_something
    # etc.
  end
  private
  def huge_object
    @obj ||= begin
      # allocate and initialize a ~10MB object
    end
  end
end

我惊奇地发现,即使在生产环境中,每次调用myaction时,都会分配对象。此外,由于GC没有收集它,因此有些东西持有对它的引用。我通过在其他类中包装对象并在该类中包含Singleton来解决这个问题。尽管如此,我还是想知道这里发生了什么。

这是在github问题的rails评论中提到的,我想不久之前,你可以在那里搜索它。长话短说,它这样做是因为类变量不会在请求之间停留。

相关内容

  • 没有找到相关文章

最新更新