SoftReference
インスタンス変数として作成された場合にWeakReference
のみ役立ちますか?メソッドスコープでそれらを使用することに何か利点はありますか?
他の大きな部分はReferenceQueue
です。どの参照がガベージと判断されたかを追跡できることに加えてReference.enqueue()
、ガベージコレクションのオブジェクトを強制的に登録するために使用できますか?
たとえば、オブジェクト内の(強力な参照によって保持されている)重いメモリリソースを使用するメソッドを作成し、それらをキューに入れるための参照を作成することは価値がありますか?
Object bigObject;
public void dispose() {
ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
WeakReference<Object> ref = new WeakReference<Object>(bigObject, queue);
bigObject = null;
ref.enqueue();
}
(この場合のObjectは、大量のメモリを使用するオブジェクトタイプを表していると想像してください...などBufferedImage
)
これは現実的な効果がありますか?それとも、これは単なるコードの無駄ですか?