2012-08-10 13 views
8

In Java esiste una struttura dati chiamata WeakHashMap che memorizza i riferimenti deboli come chiavi. Ogni volta che i riferimenti deboli vengono tolti dalla memoria, la voce viene rimossa dalla mappa.Java: Stack con riferimenti deboli

Se si dispone di una struttura dati come una pila o un set in cui sono memorizzati riferimenti deboli, le relative voci verranno automaticamente rimosse quando il riferimento debole viene estratto dalla memoria?

Di seguito è riportato un esempio di stack che memorizza riferimenti deboli.

Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>(); 
+0

Uh, sì ... ... – esej

+0

Sei sicuro che non restituirà un valore nullo? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+1

Se stai pensando di utilizzare riferimenti deboli per un'applicazione reale, ti preghiamo di non farlo **! Le persone che costruiscono la libreria principale si pentono di aggiungerle poiché non offrono alcun vantaggio. Guarda questa [presentazione] (http://www.infoq.com/presentations/Extreme-Performance-Java) se sei interessato. – Augusto

risposta

2

Sì. Quello che stai descrivendo è una proprietà di riferimenti deboli in generale, non nello specifico WeakHashMap.

Da the API:

Supponiamo che il garbage collector determina ad un certo punto nel tempo che un oggetto è debolmente raggiungibile. A quel tempo cancellerà atomicamente tutti i riferimenti deboli a quell'oggetto ...

+0

Quindi, se hai una listaLista di WeakReferences e una delle WeakReferences nel mezzo della lista va fuori di memoria, la tua LinkedList funzionerà come previsto? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Non sono sicuro di come rispondere ... dipende da ciò che consideri essere "come previsto". – Pops

+0

Penso che quello che non ho capito è quando chiami .get() su un WeakReference ottiene l'oggetto reale. WeakReference non è mai impostato su null solo l'oggetto a cui punta. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Problemi correlati