Создание объекта Java и объем памяти - PullRequest
1 голос
/ 14 января 2010

Я пытаюсь понять, какой размер будет выделен Java-объекту при создании с помощью оператора new .

Считайте, что я создаю класс

public class NewClass {

    NewClass() { }

}

когда я создаю экземпляр NewClass, используя NewClass nc = new NewClass();. Каков размер NewClass, который создается в куче?

~ Джеган

Ответы [ 2 ]

9 голосов
/ 14 января 2010

Профилирование - лучший способ, но вы можете получить хорошую оценку следующим образом:

8 байт на объект (только накладные расходы) плюс поля.

  • Примитивные поля: как указано в Java. Примечание: логическим значениям требуется 1 полный байт.
  • Поля объекта: 1 указатель (4 байта на 32-битной виртуальной машине, 8 на 64-битной), плюс размер самого объекта (если не ссылка на ранее существующий объект)
  • Массивы: 4 байта + объект / примитивы для элементов
  • Струны: далеко, слишком много. IIRC, 24 байта + 2 байта / символ. Может быть больше.

Окончательный результат увеличивается до ближайшего кратного 8 байтов.

См. Также мой пример здесь , чтобы узнать, как рассчитать использование памяти для более сложного объекта. Примечание: эти правила могут отличаться в зависимости от виртуальных машин и могут меняться по мере выхода новых версий виртуальной машины. Моя оценка относится только к Sun JVM, хотя я подозреваю, что результаты IBM будут аналогичными.

0 голосов
/ 14 января 2010

Я думаю, вам нужно использовать профилировщик, чтобы измерить это. Для этого вы можете использовать профилировщики JProfiler или YourKit .

...