Je suis arrivé précédemment à la conclusion que si vous avez besoin d'une référence SoftReference avec une égalité basée sur la valeur (égal à), la conception est mauvaise, à l'exception d'un interner. Ceci fait suite à Google Collections et à Guava n'incluant pas une telle classe. Mais j'ai rencontré un problème qui, je pense, pourrait utiliser un tel objet.Utilisation potentielle pour SoftReference avec égalité de valeur (égal à)
Nous avons un système de gestion d'actifs dans une ferme de rendu d'effets visuels avec des centaines de processus exécutant le même travail qui ne diffèrent que par le nombre d'images qu'il rend. Nous avons une base de données Oracle qui doit enregistrer tous les actifs utilisés. Au lieu de battre Oracle avec des insertions identiques où un seul réussira de tous les travaux, dans le système de gestion des actifs de niveau intermédiaire, nous pouvons utiliser un HashSet pour enregistrer si l'objet qui serait inséré dans Oracle.
Je pourrais utiliser un Google MapMaker avec une expiration, mais je ne veux pas avoir à vous soucier de l'expiration correcte, nous avons des rendus qui s'exécutent en quelques heures et quelques jours. L'utilisation d'un SoftReference avec une égalité égale équivaut à un bien meilleur moyen pour que la JVM gère automatiquement la récupération de place. Pour d'autres problèmes que je veux résoudre avec un ConcurrentHashMap avec garbage collection, j'utiliserais une référence forte dans HashMap comme clé pour obtenir l'égalité equals() et une SoftReference comme valeur pour que la JVM puisse récupérer quelque chose , mais dans ce cas, la valeur n'a pas d'importance et je n'ai pas de valeur à insérer dans un SoftReference à mettre là. Donc, il semble que l'utilisation d'un SoftReference avec equals() ferait l'affaire.
D'autres suggestions?
Aimez votre question, je me demandais à ce sujet aussi récemment – nanda
Est-ce que 'ResourceBundle' ne fait pas quelque chose comme ça? –
@nanda Ce qui est ajouté à Oracle est une liste d'actifs (disons les noms de fichiers sur un serveur NFS) générés dynamiquement; ResourceBundle ne semble pas être la bonne solution. J'ai juste besoin d'un HashSet pour enregistrer que le nom de fichier a été enregistré dans Oracle, donc 99 autres tentatives pour l'insérer ne gâchent pas les cycles CPU dans Oracle. –