Java использует двойное косвенное обращение для своих объектов, чтобы их можно было перемещать в памяти и сохранять свои ссылки действительными, это означает, что каждый поиск ссылок эквивалентен двум поискам указателей. Эти дополнительные поиски нельзя полностью оптимизировать.
Возможно, еще хуже то, что производительность вашего кэша будет ужасной. Доступ к значениям в кэше будет во много раз быстрее, чем доступ к значениям в основной памяти. (возможно, 10x) Если у вас есть int [], вы знаете, что значения будут последовательными в памяти и, следовательно, легко загружаются в кэш. Тем не менее, для Integer [] отдельные объекты Integer могут случайно появляться в вашей памяти и с гораздо большей вероятностью будут пропускать кэш. Кроме того, Integer использует 24 байта, что означает, что они с меньшей вероятностью поместятся в ваши кэши, чем значения в 4 байта.
Если вы обновите Integer, это часто приводит к созданию нового объекта, который на много порядков больше, чем обновлениезначение int.