Каков размер сохраненного файла java.lang.Integer? - PullRequest
0 голосов
/ 14 января 2019

Я использую Java Hotspot 1.8.0_191-b12 (64 бита, Xmx <32 ГБ) и смотрю дамп jmap (формат hprof) с различными инструментами. </p>

Отчеты VisualVM (и инструменты на основе профилировщика NetBeans) сильно отличаются от Yourkit и Eclipse Memory Analyzer.

Я посмотрел на самые простые объекты, и даже они отличаются ... для java.lang.Integer, VisualVm сообщает 20 байтов вместо 16 как другие (это в моей интерпретации, потому что = 12 байтов заголовок + 4 байта int 'value' из класса Integer = 16, заполнение не требуется).

Какой из них правильный и почему?

1 Ответ

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

Единственный правильный инструмент для использования - JOL , все остальные могут быть неточными.

И это сообщает 16 bytes: 12 для заголовков + 4 для int (так что вы правы).

  Integer i = 42;

  System.out.println(ClassLayout.parseInstance(i).toPrintable());

Я предоставляю вам возможность запустить этот код и посмотреть вывод самостоятельно. Просто обратите внимание, что это могло бы быть больше, если бы UseCompressedOops был бы отключен; в таком случае было бы дополнительно 4 bytes + дополнительный 4 bytes для заполнения.

...