Йол, чтобы найти смещение полей в классе
Я использую 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