我有以下课程:
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 来解决此问题。不过,我想了解这里发生了什么。