Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему адрес FF F8, а не 00 00?

Neon mode Гуру (3119), на голосовании 1 год назад
Я компилирую вот это:
 public class Main {
public static void main(String[] args) {
while(true) {
System.out.println("Loop");
}
}
}
И когда дизассемблирую с помощью утилиты javap, то сначала в методе main я смотрю в конец кода, и там goto 0, но когда смотрю на class файл с hex редактора, то там A7 FF F8 в конце метода. Почему FF F8, а не 00 00? Это типо машинный ноль что-ли? Так не должно быть.
Голосование за лучший ответ
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (264079) 1 год назад
Виртуальная машина Java использует смещения относительно текущей инструкции, и в данном случае FF F8 соответствует смещению -8 байт относительно текущей инструкции.
Neon modeГуру (3119) 1 год назад
А причем тут -8, если должно быть 0?
а почему должно быть 0?
Sergio 2.1 Оракул (67303) 1 год назад
В Java байткоде инструкция goto имеет два байта операнда, которые используются для указания относительного смещения от текущей инструкции до целевой инструкции. Эти два байта интерпретируются как знаковое 16-битное целое число в формате big-endian. В вашем случае, два байта операнда FF F8 интерпретируются как знаковое 16-битное целое число -8, что означает, что инструкция goto переходит на 8 байт назад от текущей позиции. Это соответствует началу цикла while, который находится в 8 байтах перед инструкцией goto. Таким образом, FF F8 является правильным относительным смещением для перехода к началу цикла while. Относительное смещение используется, чтобы обеспечить корректность кода даже при изменении размера метода или перемещении инструкций внутри метода. Оно не зависит от абсолютного расположения инструкций внутри метода и всегда указывает на правильную целевую инструкцию. Я надеюсь, что это помогло вам понять, почему в байткоде используется FF F8, а не 00 00.
Александр Искусственный Интеллект (301635) 1 год назад
спрашивайте у разработчиков утилиты javap
Похожие вопросы