Czy SoftReference
i WeakReference
naprawdę pomaga tylko wtedy, gdy zostały utworzone jako zmienne instancji? Czy są jakieś korzyści z ich zastosowania w zakresie metody?Korzystanie z Java's ReferenceQueue
Inna duża część to ReferenceQueue
. Oprócz możliwości śledzenia, które referencje są określane jako śmieci, czy można użyć Reference.enqueue()
do wymuszonego rejestrowania obiektu do zbierania śmieci?
Na przykład, czy byłoby warto stworzyć metodę, która zabiera trochę ciężkich zasobów pamięci (przechowywanych przez silne referencje) w obiekcie i tworzenie odnośników do ich kolejkowania?
Object bigObject;
public void dispose() {
ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
WeakReference<Object> ref = new WeakReference<Object>(bigObject, queue);
bigObject = null;
ref.enqueue();
}
(Wyobraźmy sobie, że w tym przypadku obiekt reprezentuje typ obiektu, który używa dużo pamięci ... jak BufferedImage
lub coś)
to ma żadnego realistyczny efekt? A może to tylko strata kodu?
Łagodnie powiązane: https://codereview.stackexchange.com/q/28534/4394 – Pacerier