Сколько места занимает класс в JVM? - PullRequest
0 голосов
/ 01 апреля 2019

Я искал бесполезный поиск на разных сайтах, потому что все результаты поиска хотят рассказать мне, как вычислить размер объекта, а не класса.

Когда мы определяем класс (с помощьюфайл .class в jar / war) и он загружается в JVM, сколько места это занимает?Очевидно, это зависит от реальных вещей в классе, класс с большим количеством полей имеет больше метаданных для хранения.Но если мы скажем, например, что у класса было 10 целочисленных полей и 10 ссылочных полей для других объектов:

  • Сколько дополнительного пространства потребовалось бы в JVM, чтобы сказать, 1000 таких классов (всерасширение того же базового класса)?
  • Изменится ли это, если бы они были анонимными классами вместо определенных классов?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Ну, каждый Class сам по себе является объектом. Таким образом, ориентировочный размер будет вызывать Instrumentation.getObjectSize() для самого класса.

Вы можете следовать руководству здесь: https://www.baeldung.com/java-size-of-object

А затем, если вы хотите проверить размер MyClass, вы можете сделать: InstrumentationAgent.getObjectSize(MyClass.getClass());

Это не означает, что это единственная память, связанная с этим классом, потому что загрузчик классов, сборщик мусора и другие внутренние операции JVM могут хранить другую метаинформацию о классе.

0 голосов
/ 01 апреля 2019

Ответ будет определенно зависеть от реализации JVM (включая версию такой реализации, платформу и т. Д.).Вы не можете получить ни одного числа.

Что касается анонимных внутренних классов, то для них все еще есть сгенерированные имена классов, так что это должно иметь нулевое влияние.

...