Почему 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 в этот класс. Тем не менее, я хочу понять, что здесь происходит.
1 ответ
Это было упомянуто в обзоре рельсов по GitHub-проблемам, я думаю, недавно, вы можете найти его там. Короче говоря, это происходит потому, что переменная класса не задерживается между запросами.