Necesito asociar algunos datos con una clave durante su vida útil, entonces estoy usando un WeakHashMap
. Sin embargo, además necesito obtener una clave por su valor correspondiente. La manera más fácil de hacerlo es aferrarse a la referencia al crear un valor:¿Se recolectará una entrada de WeakHashMap si el valor contiene la única referencia fuerte a la clave?
public class Key {}
public class Value {
final public Key key;
public Value(Key k) {
key = k;
}
}
Por supuesto, mientras que yo uso en mi Value
programa, su key
no va a desaparecer. Sin embargo, si no hay más referencias a cualquiera de las claves o su valor fuera del mapa, ¿se recolectará basura? ¿O la referencia fuerte que sobrevive en el valor lo previene?
+1 Tal vez debería haber leído la documentación primero. :) – biziclop
@biziclop También desde el Javadoc: Una forma de lidiar con esto es envolver los valores en WeakReferences antes de insertarlos, como en: m.put (clave, nueva WeakReference (value)), y luego desenvolver en cada get. ¡Eso debería hacer el truco! – laguille
O eso o solo almacena una referencia débil a la clave en tus objetos de valor. Porque si ajusta el valor en un WR, podría terminar con una clave existente con el valor alraedy recopilado. – biziclop