Мне было интересно, есть ли разница в памяти, занимаемой
Integer n
и int n
.
Я знаю, что int n
занимает обычно 4 байта, как насчет Integer n
Мне было интересно, есть ли разница в памяти, занимаемой
Integer n
и int n
.
Я знаю, что int n
занимает обычно 4 байта, как насчет Integer n
В общем случае память кучи, используемая объектом Java в Hotspot, состоит из:
согласно предложению Марка Петерса, я хотел бы добавить ссылку ниже http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
Объект Integer в Java занимает 16 байтов.
Я не знаю, имеет ли значение 64- и 32-битная JVM. Для примитивных типов это не имеет значения. Но я не могу с уверенностью сказать, как объем памяти объекта изменяется (если вообще изменяется) в битовой системе 64-.
Вы можете проверить это здесь:
Для int: 4 байта, используемых для каждого элемента без оберток, и 16 на элемент с оберткой.
Обернутые двойные отчеты как 24 байта на элемент, с фактическим двойным значением как 64 бита (8 байтов).
Подробнее здесь
int - это простой тип данных, для хранения которого требуется 32 бита (4 байта).
Когда ваш код Java использует оператор new для создания экземпляра объекта Java, гораздо больше данные распределены, чем вы могли ожидать. Например, вас может удивить то, что отношение размеров значения int к объекту Integer - наименьшему объекту, который может содержать значение int - обычно 1: 4.
Целое число - это объект, для хранения которого требуется 128 бит (16 байт).
Когда мы создаем новое целое число, используя новый оператор, он распределяет память следующим образом.
Класс Object (32 бита) - состоит из указателя на информацию о классе, которая в нашем случае описывает объект с указанием на класс java.lang.Integer
Флаги (32 бита) - это набор флагов, который описывает состояние объекта. Например, есть ли у него хэш-код, массив или нет, т.е. его форма.
Lock (32 бита) - хранит информацию о синхронизации объекта. синхронизирован ли объект в настоящее время или нет.
Выше 3 точек называются метаданными объекта.
Все вышеприведенное объяснение относится к 32-битной архитектуре процессора. Он может отличаться от версии JVM и поставщика.
По крайней мере, можно подтвердить, что все Integer
от -127 to +127
кэшируются. Если они созданы с использованием autoboxing
ar Integer#valueOf(value)
, то не потребуется дополнительная память.
Для a Integer
требуется только 32 bit
.
value
- единственная переменная-член, которая принимает память. Поэтому для хранения объекта потребуется размер целого числа, исключая дополнительную память.
public final class Integer extends Number implements Comparable<Integer> {
...
private final int value;
...
}