Вопрос

Вариант использования корреляции:

read input 

if (correlation-id is already generated for this input) 
{ 
   lookup the correlation-id from the cache; 
   return correlation-id; 
} 

else 
{ 
   generate the correlation-id; 
   cache it; 
   return correlation-id; 
} 

Ограничения:- Количество входных записей может пройти до 500K, поэтому не хочет использовать сильные ссылки.-Не хочет генерировать хэши с односторонним движением на данный момент (я знаю, что если мы используем односторонний хэш, то нет необходимости в кеше)

Может кто-нибудь сказать мне, как использовать ComputingMap для этого.Я спрашиваю об этом, потому что в Javadoc есть записка, в которой говорится: «Он использует равенство идентификации для слабых/мягких клавиш».

Это было полезно?

Решение

С классами Google Guava/Collection и мягкими или слабыми ключами или значениями ваши ключи должны быть сильными ссылками, чтобы карта могла использовать равенства(), а не == для поиска кэшированных значений.Если у вас есть слабые/мягкие клавиши, поиск выполняется по идентификатору, поэтому вы всегда будете получать промахи в кеше.Поэтому, если вы хотите, чтобы сборщик мусора собирал элементы из вашего кэша, вам нужно сделать значения мягкими или слабыми.

Я понимаю, что Google добавит функцию эквивалентности в будущем, чтобы вы могли указать, хотите ли вы равны () или ==, и не делать этот выбор за вас, выбирая сильные, слабые или мягкие ссылки.

Поскольку ваш объект Tuple реализует методы равенства() и hashCode(), вы просто выполняете

new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Tuple,String>() {
                                         public String apply(Tuple t) {
                                             // generate the correlation-id
                                         }
                                    });
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top