Как только JIT компилирует байт-код в собственный код, регистры и стек виртуальных машин теряют смысл.
Я бы использовал отладчик, чтобы посмотреть, что программа Java построчно выполняет.Байт-код предназначен для виртуальной машины, а не для фактической, и JVM не должна буквально следовать виртуальной машине, только то, что делает программа.
JIT может
- использоватьмножество регистров, которые ваш ЦП имеет вместо того, чтобы использовать чистый стек.
- встроенный код, а не выполнять вызовы методов.
- удалить код, который он определяет, не используется.
- placeобъекты в стеке.
- не синхронизируют объекты, которые используются только в локальном методе.
Хороший инструмент, чтобы увидеть, как код преобразуется из байтового кода в машинный код: JITWatch