私は次のクラスを持っています:
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 はそれを収集しないため、何かがそれへの参照を保持しています。オブジェクトを他のクラスでラップし、そのクラスにシングルトンを含めることで回避策を作成しました。それでも、ここで何が起こっているのか理解したい。