Каковы накладные расходы на память объекта в Java?


person Community    schedule 07.04.2009    source источник
comment
Похоже на дубликат stackoverflow.com/questions/258120/ (или, по крайней мере, ответы на этот вопрос действительны).   -  person Michael Myers    schedule 07.04.2009
comment
Ага, мне кажется, это обман.   -  person Jon Skeet    schedule 07.04.2009


Ответы (1)


Это будет зависеть от того, какую JVM вы используете.

Предполагая, что вы не используете JVM со сжатыми указателями, массив будет потреблять:

  • 8 байт для указателя типа.
  • 4 байта для длины массива.
  • 8 байтов для каждого элемента в массиве (это указатели на фактические объекты).
  • Сумма: 8 + 4 + len * 8 байт
  • Для JVM со сжатыми указателями: 4 + 4 + len * 4 байта

Тогда фактические объекты, которые вы храните (ссылки) в массиве, будут потреблять память в зависимости от того, какие они объекты. java.lang.Object содержит только указатель на класс, поэтому 8 байтов или 4 байта при использовании сжатых указателей.

Для ваших собственных классов вы можете подсчитать использование памяти, посмотрев на поля в классе. Каждая ссылка будет занимать 8 байтов (4 байта для сжатых указателей). Каждые длинные 8 байтов, int 4 байта, char / short 2 байта, байт / логическое значение 1 байт. Но все они будут выровнены по четному общему размеру, кратному 4 или 8 байтам, в зависимости от того, какую JVM вы используете.

person thobe    schedule 07.04.2009