2011-05-04 168 views
3

我有下面的类:为什么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来做出解决方法。不过,我想了解,这里发生了什么。

回答

0

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