2011-05-04 2 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 문제에 대한 레일스 논평에서 언급되었습니다. 거기서 검색 할 수 있습니다. 간단히 말해서 클래스 변수가 요청 사이에 붙지 않기 때문입니다.