Йол, чтобы найти смещение полей в классе

Я использую jol, чтобы найти смещение полей, как показано ниже:

      import java.lang.reflect.Field;

public static void main(String[] args) throws NoSuchFieldException {
    System.out.println(ClassLayout.parseClass(Field.class).toPrintable());
}

Выход:

      OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     N/A
  8   4        (object header: class)    N/A
 12   4        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

В третьей строке отображается (пробел в выравнивании объекта), но не отображается смещение таких полей, как переопределение, имя, тип и т. д.

Как я могу получить смещение этого поля? Или есть другие способы получить компенсацию?

1 ответ

Плагин JOL IntelliJ , очевидно, показывает информацию о смещении.

Установите плагин, используйте где-нибудь в своем коде, наведите курсор на текст, затем перейдите в «Код» -> «Показать макет объекта».

Обратите внимание, что существует также селектор для использования реализации JVM.

Интересно, используяsudoс помощью инструмента командной строки JOL сообщите о другом размере дляFieldобъект — 72 байта для моей JVM.

      $ sudo java -jar jol-cli-latest.jar internals java.lang.reflect.Field

Вывод:

      java.lang.reflect.Field object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000005 (biasable; age: 0)
  8   4        (object header: class)    0x0006e918
 12   4        (object alignment gap)    
Instance size: 72 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
Другие вопросы по тегам