Целое число против int: относительно памяти - PullRequest
38 голосов
/ 07 декабря 2011

Мне было интересно, есть ли разница в памяти, занимаемой Integer n, и int n.

Я знаю, int n обычно занимает 4 байта, как насчет Integer n

Ответы [ 3 ]

42 голосов
/ 07 декабря 2011

Как правило, куча памяти, используемая объектом Java в Hotspot, состоит из:

  • заголовок объекта, состоящий из нескольких байтов "служебной" информации;
  • память для примитивных полей, в соответствии с их размером (int n-> 32 бита)
  • память для ссылки полей (по 4 байта каждое) (целое число n -> 32 бита)
  • заполнение: потенциально несколько «потраченных впустую» неиспользуемых байтов после данных объекта, чтобы каждый объект начинался с адреса, который является удобным кратным байту, и уменьшает количество битов, необходимых для представления указателя на объект.

согласно предложению Марка Питерса, я хотел бы добавить ссылку ниже http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

8 голосов
/ 07 декабря 2011

Объект Integer в Java занимает 16 байт.

Я не знаю, имеет ли значение 64-разрядная 32-разрядная JVM.Для примитивных типов это не имеет значения .Но я не могу с уверенностью сказать, как изменяется объем памяти объекта (если вообще изменяется) в 64-разрядной системе.

Вы можете проверить это сами здесь:

Java Совет 130: знаете ли вы размер данных?

3 голосов
/ 07 декабря 2011

Для int: 4 байта используются на элемент без упаковщиков и 16 на элемент с оболочкой.

Обернутый двойной отчет сообщает как 24 байта на элемент, с фактическим двойным значением как 64 бита (8 байтов).

Подробнее здесь

...