Проанализируйте различия в производительности и использовании памяти при использовании int[] и Integer[] в Java, особенно в контексте данного фрагмента кода:

int[] хранит значения плотно, Integer[] — ссылки на отдельные объекты. В цикле new Integer создаёт миллион обёрток за проход, постоянно заменяя предыдущие и увеличивая давление на GC.

Короткий ответ

Что ответить на собеседовании

int[] хранит значения плотно, Integer[] — ссылки на отдельные объекты. В цикле new Integer создаёт миллион обёрток за проход, постоянно заменяя предыдущие и увеличивая давление на GC.

Подробный разбор

Ответ с пояснениями

Условие

Проанализируйте различия в производительности и использовании памяти при использовании int[] и Integer[] в Java, особенно в контексте данного фрагмента кода:

int SIZE = 1000000;
int[] x = new int[SIZE];
Integer[] y = new Integer[SIZE];
for (;;) {
    for (int i = 0; i < SIZE; ++i) {
        y[i] = new Integer(x[i]);
    }
}

Ответ

int[] хранит значения плотно, Integer[] — ссылки на отдельные объекты. В цикле new Integer создаёт миллион обёрток за проход, постоянно заменяя предыдущие и увеличивая давление на GC.

Полезная нагрузка int[1_000_000] занимает 4 000 000 байт плюс заголовок и выравнивание. У Integer[] дополнительно нужны массив ссылок и объекты-обёртки; точный размер зависит от JVM. x изначально заполнен нулями, но new не использует Integer cache как valueOf. Цикл бесконечный и не выводит результат; это плохой benchmark из-за возможных JIT-оптимизаций. Для числовой обработки без null предпочтителен int[].

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее