Ce qui est un et quand doit on utiliser ? Quelles sont les différences entre un
et un `` ?
Réponses
Trop de publicités?Éléments d'une faiblesse de la table de hachage peut être récupéré par le ramasse-miettes si il n'y a pas d'autres références fortes à l'objet, ce qui les rend utiles pour les caches de recherche de stockage.
La faiblesse de référence ne sont pas limités à ces tables de hachage, vous pouvez utiliser WeakReference pour des objets. Ils sont utiles pour économiser des ressources, vous pouvez faire référence à quelque chose, mais lui permettre d'être collectées lorsque rien d'autre référence. (BTW, une chaîne de référence est normal java de référence). Il y a aussi des références faibles qui ont tendance à ne pas être aussi facilement recueillies douce références (qui n'ont pas tendance à se planquer pendant longtemps après que la dernière référence forte disparaît)
Comme d'autres l'ont déjà fait remarquer qu'ils constituent un moyen pour l'utilisation d'un objet comme une clé sans la création d'une référence forte. Ceci est utile dans les situations où vous ne voulez pas nuire à la JVM de la capacité à collecter les ordures de l'objet, mais encore veulent toujours la possibilité de suivre certains aspects de l'objet, ce qui les rend idéal pour la mise en cache ou de stockage des métadonnées à propos de l'objet.
Je vous suggère la lecture de cet article à propos de la forte vs faible des références en Java. Sans une compréhension de la différence de la structure de données elle-même n'a guère de sens.
caisse Effective Java, Édition 2, page 26.
Une autre source commune de fuites de mémoire est caches. Une fois que vous mettez un référence de l'objet en cache, il est facile d'oublier qu'il est là et le laisser dans la cache de temps après, il devient hors de propos. Il existe plusieurs solutions à ce problème. Si vous êtes assez chanceux pour mettre en œuvre un cache dont une entrée est pertinent exactement tant qu'il y a des références à sa clé à l'extérieur de la cache, représentent le cache comme un WeakHashMap; les inscriptions seront automatiquement supprimés une fois qu'elles deviennent obsolètes. Rappelez-vous que WeakHashMap est utile uniquement si la durée de vie souhaitée de cache les entrées est déterminé par les références externes à la clé, pas de la valeur.
De jGuru:
Un WeakHashMap est une Carte spéciale la mise en œuvre, où les clés de la carte sont stockées dans une
java.lang.ref.WeakReference
. Par stocker les clés dans une référence faible, les paires clé-valeur dynamique peut être supprimées de la carte lors de la seule référence à la clé, c'est de la faiblesse de la de référence. Cela rend le WeakHashMap une excellente mise en œuvre d'un faiblement liste référencée, où les entrées qui ne sont pas utilisés ailleurs peut-être supprimés sans effets secondaires. Aussi, simplement parce qu'une clé peut être supprimé, ne signifie pas qu'il sera immédiatement de chute. Si le système dispose de suffisamment de ressources, la faiblesse de la clé de référence qui n'est-ce pas une référence externe pourrait rester autour pendant un long moment.
Plus sur les Références: