Domanda

Nel Javadoc di WeakHashMap.html , ha detto

  

"Ogni oggetto chiave in un WeakHashMap è   memorizzata indirettamente come il referente di un   riferimento debole. Quindi una chiave sarà   automaticamente essere rimosso solo dopo   i riferimenti deboli ad esso, sia all'interno   e al di fuori della mappa, sono stati   eliminato dal garbage collector ".

E poi

  

Si noti che un oggetto di valore può riferirsi   indirettamente alla sua chiave tramite il   WeakHashMap stessa; ovvero un valore   oggetto può fortemente riferimento ad alcune   altro oggetto tasto il cui associato   valore oggetto, a sua volta, si riferisce fortemente   alla chiave del primo oggetto di valore.

Ma non dovrebbero entrambe chiave e il valore di riferimento devono essere utilizzati debole WeakHashMap? vale a dire se c'è poca memoria, GC liberare la memoria detenuta dal valore di oggetto (in quanto l'oggetto valore più probabile occupano più memoria di quella oggetto chiave nella maggior parte dei casi)?

E se GC liberare l'oggetto valore, l'oggetto chiave può essere libero così?

In sostanza, sto cercando un HashMap che ridurrà l'utilizzo di memoria quando non v'è la memoria bassa (GC raccoglie il valore e oggetti chiave se necessario).

E 'possibile in Java?

Grazie.

È stato utile?

Soluzione

I riferimenti deboli sono inadeguate per le cache - NetBeans lo fa, e può andare sciocco

.

SoftReference è ciò che si desidera. In realtà è abbastanza difficile farlo bene - in modo da copiare la soluzione di qualcun altro. Alcune persone consigliano in modo esplicito la gestione di cache se stessi.

References funzionano solo con un unico riferimento. C'era una proposta per l'aggiunta di "ephemerons" per Java SE, ma non ho visto un'implementazione andare da nessuna parte con questo.

Altri suggerimenti

L'idea è che si può utilizzare questa mappa come struttura di dati "di ricerca", che mantiene solo i valore di coppie di chiavi vivi che ancora è possibile fare riferimento a (tramite un tasto). Eppure, mentre l'idea di base è bello, mi ricordo che non era utile come speravo che sarebbe stato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top