Какова нагрузка на память объекта в Java?

Дубликат:

Какое потребление памяти у объекта в Java?

Предполагая Java 1.6 JVM на 64-битном Linux на процессоре Intel или AMD, создание простого объекта использует сколько памяти в байтах? Например, каждая строка в двумерном массиве является отдельным объектом. Если мой массив большой, сколько оперативной памяти я буду использовать?

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 байта, byte / boolean 1 byte. Но все они будут выровнены по четному общему размеру, кратному 4 или 8 байтам, в зависимости от того, какую JVM вы используете.

Другие вопросы по тегам