Определить размер одного определения класса Java в пространстве PermGen? - PullRequest
3 голосов
/ 18 июля 2011

Как определить размер отдельного конкретного определения класса (а не объекта)?В частности, сколько памяти PermGen использует данный класс?Если его невозможно рассчитать, насколько приблизительно он соответствует размеру файловой системы несжатого файла .class?

Я прочитал Джон Масамицу о том, что содержит PermGen:

  • Основные поля класса Java
  • Методы класса (включая байт-коды)
  • Имена классов (в форме объекта, который также указывает на строку впостоянное поколение)
  • Информация о постоянном пуле (все данные читаются из файла класса, см. главу 4 спецификации JVM).
  • Массивы объектов и массивы типов, связанные с классом (например, массив объектов, содержащий ссылки на методы).
  • Внутренние объекты, созданные JVM (например, java / lang / Object или java / lang / exception)
  • Информация, используемая для оптимизациикомпиляторы (JIT)

Последние два, возможно, не имеют отношения к определению отдельного класса.Я заинтересован в остальном.

Единственное возможное приближение, которое я нашел, это java.lang.instrument.Instrument.getObjectSize (myObject.getClass ()); , но "некоторыеили все »в описании оставляет меня менее чем уверенным в точности.Есть идеи?Я чувствую, что пропускаю что-то простое.

1 Ответ

3 голосов
/ 18 июля 2011

Единственное, что вы можете сделать, это посмотреть на размер PermGen до и после загрузки класса, однако он продолжает использовать больше памяти, поскольку его методы компилируются (пере).

...