2011-05-04 169 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評論中提到的,我想不久前你可以在那裏搜索它。長話短說,它是這樣做的,因爲類變量不會在請求之間停留。