0

Использую кэш на основе HashMap<Float, Object>.

get вызывается каждый тик программы и почему-то в таком случае за секунду память переваливает за 100мб.

Однако если использовать в качестве ключа Int, то всё нормально. Почему так происходит?

Roman
  • 97
  • 1
    скорей всего это связано с boxing. У Integer есть пул в диапазоне -128..127 и похоже инты у вас по большей части попадают в этот пул – IR42 Mar 06 '21 at 21:16
  • @IR42 Вы правы, при использовании ключа > 127 появляется эта проблема. Довольно странно... Неужели kotlin или java превращает примитив в объект? Зачем? Чтобы вычислить хэш? – Roman Mar 06 '21 at 22:16
  • 2
    потому что примитивы - не объекты, а дженерик коллекции могут хранить только объекты. Why can Java Collections not directly store Primitives types?. Если требуется производительность и более адекватное потребление памяти, то можно найти библиотеку, в которой реализована хэш таблица с ключом-примитивом нужного типа и использовать данный класс – IR42 Mar 06 '21 at 22:27

0 Answers0