Do SoftReference
e WeakReference
aiutano davvero solo se creati come variabili di istanza? C'è qualche vantaggio nell'utilizzarli nell'ambito del metodo?Utilizzo di Java ReferenceQueue
L'altra grande parte è ReferenceQueue
. Oltre a essere in grado di tracciare quali riferimenti sono determinati garbage, è possibile utilizzare Reference.enqueue()
per registrare forzatamente un oggetto per la garbage collection?
Ad esempio, varrebbe la pena di creare un metodo che richiede alcune risorse di memoria pesanti (racchiuse da riferimenti forti) in un oggetto e crea dei riferimenti per accodarli?
Object bigObject;
public void dispose() {
ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
WeakReference<Object> ref = new WeakReference<Object>(bigObject, queue);
bigObject = null;
ref.enqueue();
}
(Immaginate di oggetto in questo caso rappresenta un tipo di oggetto che utilizza molta memoria ... come BufferedImage
o qualcosa)
Questo ha alcun effetto realistico? O è solo uno spreco di codice?
Mildly related: https://codereview.stackexchange.com/q/28534/4394 – Pacerier