In altre implementazioni Mappa come una HashMap, le chiavi sono fortemente raggiungibili.Ad esempio, se una HashMap ha le chiavi come classe Person come mostrato di seguito e se l'oggetto Person è impostato su null, anche dopo questo se faremo map.get (Person) otterremo il valore dalla memoria poiché le chiavi sono fortemente referenziate in una HashMap.
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Hash Map :" + wm.toString());
uscita: Hash Mappa: {} [email protected]=John
Rispetto al HashMap, WeakHashMap è quella che rimuoverà i suoi enteries non appena i tasti hanno alcun riferimento nella memoria. Ad esempio, se una WeakHashMap ha le chiavi come classe Person come mostrato di seguito e se l'oggetto Person è impostato su null, ora se si esegue map.get (Person) otterremo null da esso perché la chiave non ha riferimenti (o piuttosto debolmente raggiungibile).
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Weak Hash Map :" + wm.toString());
uscita: Debole Hash Mappa: {}
fonte
2015-01-13 14:18:27
Yep, un WeakHashMap contiene riferimenti deboli agli oggetti. Un riferimento debole ha il suo puntatore "zapped" se il garbage collector scopre che esso (e altri riferimenti deboli) è l'ultimo riferimento rimasto all'oggetto. Ma questo succede solo su alcuni cicli di GC. A mano a mano, non so cosa succede al conteggio della mappa quando questo accade. –
@aioobe "Se emp conteneva l'ultimo riferimento rendendo il Dipendente fortemente raggiungibile allora la voce nella mappa può essere rimossa." Non l'ho capito Puoi per favore elaborare di più? – Anand
@anand, se 'emp' era l'unica variabile che si riferiva ad alcuni' Employee' (a parte altri * deboli * riferimenti come quello nella mappa hash), quindi fare 'emp = null' renderà il dipendente in questione ammissibile per la raccolta dei rifiuti. Leggi su [raggiungibilità] (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ref/package-summary.html#reachability). – aioobe