En otras implementaciones de Map como HashMap, las claves son muy accesibles.Por ejemplo, si un HashMap tiene claves como clase Person como se muestra a continuación y si el objeto Person se establece en nulo, incluso después de esto si hacemos map.get (Person) obtendremos el valor de la memoria ya que las claves están fuertemente referenciadas en un HashMap.
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Hash Map :" + wm.toString());
Salida: Mapa Hash: {} [email protected]=John
En comparación con HashMap, WeakHashMap es la que va a eliminar sus enteries tan pronto como las teclas tienen ninguna referencia en la memoria. Por ejemplo, si un WeakHashMap tiene claves como clase Person como se muestra a continuación y si el objeto Person se establece en nulo, ahora si haces map.get (Person) obtendremos null de él porque la clave no tiene referencia (o más bien débilmente) accesible).
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Weak Hash Map :" + wm.toString());
Salida: Débil Hash Mapa: {}
Sí, un WeakHashMap contiene referencias débiles a los objetos. Una referencia débil tiene su puntero "desactivado" si el recolector de basura descubre que (y otras referencias débiles) es la última referencia restante al objeto. Pero esto solo ocurre en ciertos ciclos de GC. A primera vista, no sé qué ocurre con el conteo del mapa cuando esto ocurre. –
@aioobe "Si el comando emp incluyó la última referencia que hace al Empleado plenamente accesible, la entrada en el mapa puede eliminarse". No lo entendí ¿Puedes por favor elaborar más? – Anand
@anand, si 'emp' era la única variable que hacía referencia a' Empleado' (aparte de otras referencias * débiles * como la del mapa hash), entonces hacer 'emp = null' hará que el empleado en cuestión elegible para la recolección de basura. Lea sobre [accesibilidad] (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ref/package-summary.html#reachability). – aioobe