De J. Bloch
Une ... source de fuites de mémoire est les auditeurs ... La meilleure façon de garantir que les rappels sont rapidement collectés par le ramasse-miettes est de stocker uniquement des références faibles vers eux, par exemple, en les stockant uniquement en tant que clés dans un WeakHashMap.
Alors, pourquoi n'y a-t-il pas de WeakSet dans la bibliothèque Java?
1 votes
Stas, peux-tu accepter la réponse correcte et approuvée de Mart au lieu de la réponse incorrecte et désapprouvée de Martin ?
0 votes
Alors que Joshua Bloch a donné beaucoup de conseils raisonnables aux programmeurs Java, celui-ci semble être une exception terrible. Stocker des écouteurs dans une
WeakHashMap
ne garantit jamais que les rappels seront rapidement collectés par le ramasse-miettes, mais les rend plutôt terriblement non déterministes. Le ramasse-miettes ne s'exécutera que lorsqu'il n'y aura pas suffisamment de mémoire, ce qui signifie que de tels écouteurs faibles peuvent rester en suspens pendant un temps arbitrairement long et continueront d'être exécutés, mais pire encore, ces écouteurs pourraient disparaître de façon aléatoire lorsque vous en avez encore besoin, car ils nécessiteront maintenant une référence forte réellement non liée pour rester en vie.