Ранее я пришел к выводу, что если вам нужна SoftReference с равенством, основанным на значении (равно), то у вас был плохой дизайн, за исключением интернера. Это следует за Google Collections и Guava, не включая такой класс. Но я столкнулся с проблемой, которая, я думаю, могла бы использовать такой объект.
У нас есть система управления активами в ферме визуализации эффектов с сотнями процессов, выполняющих одно и то же задание, которые отличаются только номером кадра, который он отображает. У нас есть база данных Oracle, которая должна записывать все используемые активы. Вместо того, чтобы использовать Oracle с одинаковыми вставками, где только одна будет выполнять все задания, в системе управления активами среднего уровня мы можем использовать HashSet для записи, будет ли объект, который будет вставлен в Oracle.
Я мог бы использовать Google MapMaker с истечением срока действия, но я не хочу беспокоиться о том, чтобы получить правильное окончание срока действия, у нас есть рендеры, которые выполняются за часы, а некоторые за несколько дней. Использование SoftReference с равным равенством звучит намного лучше, так что JVM будет автоматически управлять сборкой мусора.
Для других проблем, которые я хочу решить с помощью ConcurrentHashMap со сборкой мусора, я бы использовал сильную ссылку в HashMap в качестве ключа для получения равенства equals () и SoftReference в качестве значения, чтобы JVM могла что-то собирать, но в этом случае значение не имеет значения, и у меня нет значения для переноса в SoftReference для помещения туда. Таким образом, кажется, что использование SoftReference с equals () поможет.
Любые другие предложения по этому поводу?