Какова нагрузка на память объекта в 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 вы используете.