Действительно ли 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
или что-то в этом роде)
Имеет ли это какой-то реальный эффект? Или это просто пустая трата кода?