Сколько памяти занимает примитив int в Java?

Ответ

Примитивный тип int в Java всегда занимает 4 байта (32 бита). Этот размер фиксирован спецификацией языка Java и не зависит от операционной системы или разрядности JVM.

Пример:

int a = 1;
int b = 1_000_000;
int c = Integer.MAX_VALUE; // 2^31 - 1
// Каждая из этих переменных занимает в стеке ровно 4 байта.

Контекст использования:

  • Локальные переменные и параметры методов: Хранятся в стеке, по 4 байта на каждую.
  • Поля класса: Если поле int является частью объекта, оно добавляет к его размеру 4 байта (плюс возможное выравнивание).
  • Массивы: В массиве int[] данные хранятся непрерывным блоком. Размер массива вычисляется как: 12 байт (заголовок массива) + 4 * length.

Сравнение с Integer: Ключевое отличие от объекта-обертки Integer (который занимает ~16 байт) — отсутствие накладных расходов на заголовок объекта и необходимость в ссылке. Поэтому int значительно эффективнее по памяти и производительности.

Ответ 18+ 🔞

Давай разберём эту хрень про int в Java, а то некоторые думают, что он, как хамелеон, размер меняет в зависимости от погоды. Нет, блядь!

Вот представь: int — это как стандартная кирпичная кладка, ёпта. Сколько бы ты ни строил — один кирпич, миллион или целый дворец из Integer.MAX_VALUE — каждый такой "кирпичик" всегда, сука, 4 байта (32 бита). Это железобетонное правило в Java, и ему похуй на то, какая у тебя операционка или JVM. Не зависит, блядь, ни от чего!

Смотри, как это выглядит в коде:

int a = 1; // 4 байта, иди нахуй
int b = 1_000_000; // тоже 4 байта, удивлён?
int c = Integer.MAX_VALUE; // 2^31 - 1, и всё равно 4 байта, пиздец!
// Каждая из этих переменных в стеке занимает ровно 4 байта, как ни крути.

А теперь где эта хуйня применяется:

  • Локальные переменные и параметры методов: Живут в стеке. Каждая — плюс 4 байта к твоему стеку. Просто, как три копейки.
  • Поля класса: Если у тебя в объекте есть поле int, то объект потяжелеет ровно на 4 байта (ну, плюс-минус выравнивание, но это уже детали).
  • Массивы: Вот тут уже интереснее. Создаёшь int[] — и данные идут сплошным блоком. Размер посчитать легко: 12 байт (это заголовок массива, его не трогай) + 4 * length. Вот и вся магия.

И главное, блядь, сравнение с Integer: Это как сравнивать голый кирпич (int) и целый особняк с охраной (Integer). Обёртка Integer — это уже полноценный объект, ёпта, занимает около 16 байт! Тут тебе и заголовок объекта, и ссылка... Нахуй столько накладных расходов, если можно обойтись четырьмя байтами? Поэтому int — это огонь по эффективности, и по памяти, и по скорости. Не усложняй, где не надо!