2012-08-10 21 views
8

En Java existe una estructura de datos llamada WeakHashMap que almacena referencias débiles como claves. Cuando las referencias débiles se toman de la memoria, la entrada se elimina del mapa.Java: pila con referencias débiles

Si tengo una estructura de datos como una pila o un conjunto donde estoy almacenando referencias débiles, ¿se eliminarán automáticamente sus entradas cuando la referencia débil se tome de la memoria?

A continuación se muestra un ejemplo de una pila que almacena referencias débiles.

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

Uh, sí ... .. – esej

+0

¿Estás seguro de que no devolverá un valor nulo en su lugar? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+1

Si está pensando en usar referencias débiles para una aplicación real, ¡** no lo haga **! Las personas que crean la biblioteca central lamentan agregarlas ya que no ofrecen ningún beneficio. Mire esta [presentación] (http://www.infoq.com/presentations/Extreme-Performance-Java) si está interesado. – Augusto

Respuesta

2

Sí. Lo que está describiendo es una propiedad de referencias débiles en general, no WeakHashMap específicamente.

De the API:

Supongamos que el recolector de basura determina en un cierto punto en el tiempo que un objeto es débilmente alcanzable. En ese momento, eliminará atómicamente todas las referencias débiles de ese objeto ...

+0

Entonces, si tiene una LinkedList de WeakReferences y una de las WeakReferences en el medio de la lista se queda sin memoria, ¿su LinkedList funcionará como se esperaba? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

No estoy seguro de cómo responder eso ... depende de lo que considere que es "como se esperaba". – Pops

+0

Creo que lo que no entendí es que cuando llamas a .get() en WeakReference, obtienes el objeto real. WeakReference nunca se establece para anular solo el objeto al que apunta. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Cuestiones relacionadas