С каким примитивным типом JVM работает эффективнее: int или short?

«С каким примитивным типом JVM работает эффективнее: int или short?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JVM оптимизирована для более эффективной работы с типом int (32 бита), чем с short (16 бит).

Причины:

  1. Нативные инструкции JVM: Базовый набор инструкций виртуальной машины (например, iload, iadd, istore) предназначен для операций с 32-битными int значениями. Для short используются те же инструкции, но с дополнительными преобразованиями.
  2. Автоматическое расширение (promotion): В арифметических и побитовых операциях shortbyte, char) неявно расширяется до int. Это требует явного приведения обратно к short, что добавляет накладные расходы.
    short a = 1000;
    short b = 2000;
    // Результат a + b имеет тип int, требуется приведение
    short c = (short) (a + b); // Риск переполнения!
  3. Выравнивание и производительность: Современные процессоры и системы памяти эффективнее работают с 32- и 64-битными словами. Использование short в локальных переменных или вычислениях часто не дает выигрыша в скорости, а иногда даже замедляет выполнение из-за необходимости маскирования и приведения типов.
  4. Экономия памяти актуальна только для массивов.
    • short[] действительно использует примерно в два раза меньше памяти, чем int[].
    • Для отдельных переменных экономия незначительна из-за выравнивания.

Рекомендация: Используйте int по умолчанию для всех вычислений и одиночных переменных. Тип short применяйте осознанно только для экономии памяти в больших массивах, где это критически важно.