Почему JIT Compiler необходимо преобразовать байт-код в другое промежуточное представление перед генерацией машинного кода

Я изучаю JVM, используя отличную книгу Oracle JRockit: The Definite Guide. Одна вещь, которую я на самом деле не понимаю, это необходимость JIT-компилятора переводить байт-код в другое промежуточное представление (IR), оптимизировать их и затем переводить в нативный код.

Согласно Википедии, байт-код - это уже тип IR. Почему JIT-компилятор в JRockit не оптимизирует байт-код напрямую? Я предполагаю, что на байт-коде выполнить оптимизацию сложнее, чем на другом IR (например, C), но я совсем не уверен.

1 ответ

Некоторые оптимизации зависят от целевой архитектуры (набора команд и т. Д.) И, следовательно, невозможны для байт-кода, который не зависит от архитектуры.

Другие вопросы по тегам