Этот ответ не относится к размеру объекта, но когда вы используете массив для размещения объектов; какой объем памяти он выделит для объекта.
Таким образом, массивы, списки или карты всех этих коллекций не будут на самом деле хранить объекты (только во время примитивов, необходим реальный объем памяти объекта), он будет хранить только ссылки на эти объекты.
Теперь Used heap memory = sizeOfObj + sizeOfRef (* 4 bytes) in collection
- (4/8 байт) зависит от (32/64 бита) ОС
примитивы
int [] intArray = new int [1]; will require 4 bytes.
long [] longArray = new long [1]; will require 8 bytes.
ОБЪЕКТОВ
Object[] objectArray = new Object[1]; will require 4 bytes. The object can be any user defined Object.
Long [] longArray = new Long [1]; will require 4 bytes.
Я имею в виду, что весь объект REFERENCE требует только 4 байта памяти. Это может быть ссылка на строку ИЛИ двойная ссылка на объект, но в зависимости от создания объекта требуемая память будет варьироваться.
например. Если я создаю объект для нижеуказанного класса ReferenceMemoryTest
, то будет создано 4 + 4 + 4 = 12 байт памяти. Память может отличаться, когда вы пытаетесь инициализировать ссылки.
class ReferenceMemoryTest {
public String refStr;
public Object refObj;
public Double refDoub;
}
Таким образом, при создании массива объектов / ссылок все его содержимое будет занято ссылками NULL. И мы знаем, что каждая ссылка требует 4 байта.
И, наконец, выделение памяти для приведенного ниже кода составляет 20 байт.
ReferenceMemoryTest ref1 = new ReferenceMemoryTest (); (4 (ref1) + 12 = 16 байт)
ReferenceMemoryTest ref2 = ref1; (4 (ref2) + 16 = 20 байт)