Question

Dans le Javadoc WeakHashMap.html , a indiqué

  

"Chaque objet clé est dans un WeakHashMap   stockée indirectement en tant que référent d'un   référence faible. Par conséquent, une touche   être automatiquement retiré seulement après   les références faibles à l'intérieur, à la fois   et à l'extérieur de la carte, ont été   dégagé par le garbage collector ».

Et puis

  

Notez que peut renvoyer un objet de valeur   indirectement à la clé par l'intermédiaire du   WeakHashMap lui-même; qui est une valeur   objet peut fortement se référer à certains   autre objet clé associée dont   objet de valeur, à son tour, se réfère fortement   à la clé du premier objet de valeur.

Mais ne devrait pas la clé et la valeur doivent être utilisés référence faible dans WeakHashMap? à savoir s'il est faible sur la mémoire, GC libérera la mémoire détenue par l'objet de valeur (puisque l'objet de valeur très probablement plus de mémoire que l'objet clé dans la plupart des cas)?

Et si l'objet GC libérer de la valeur, l'objet clé peut être libre aussi bien?

En fait, je suis à la recherche d'un HashMap qui réduit l'utilisation de la mémoire quand il y a peu de mémoire (GC recueille la valeur et les objets clés si nécessaire).

Est-il possible en Java?

Merci.

Était-ce utile?

La solution

références faibles sont inappropriées pour les caches - NetBeans fait, et peut aller stupide

.

SoftReference est ce que vous voulez. Il est assez difficile de faire les choses - donc copier la solution de quelqu'un d'autre. Certaines personnes conseillent gérer explicitement vous met en cache.

References ne fonctionnent qu'avec une référence unique. Il y avait une proposition d'ajouter « ephemerons » Java SE, mais je n'ai pas vu une mise en œuvre aller partout avec cela.

Autres conseils

L'idée est que vous pouvez utiliser cette carte comme structure de données « de consultation » qui ne conserve que la valeur de paires de clés en vie qui peut encore être fait référence à (via une clé). Pourtant, alors que l'idée de base est agréable, je me rappelle qu'il n'a pas été aussi utile que je l'espérais.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top