Я написал метод для обновления HashMap, предоставил значение идентификатора int (например, идентификатор клиента) в качестве ключа, метод проверял, доступен ли ключ на карте, в противном случае он создавал запись и связывал новый ArrayList для ключа. Если доступно, он вернет существующий список. Изначально я написал метод, используя Map.containsKey в сочетании с Map.put.
Код: Выделить всё
if(map.containsKey(id)) {
return map.get(id);
} else {
List list = new ArrayList();
map.put(id, list);
return list;
}
Вышеуказанный метод работал нормально, позже я подумал о его рефакторинге, чтобы использовать ComputeIfAbsent, который делал бы то же самое.
Поэтому я изменил метод как
Код: Выделить всё
return map.computeIfAbsent(id, ArrayList::new);
Хотя я ожидал, что это сработает, во время тестирования производительности я столкнулся с неожиданным потреблением динамической памяти. Есть идеи, почему новый код потребляет много оперативной памяти.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... igh-memory