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