Почему JIT Compiler необходимо преобразовать байт-код в другое промежуточное представление перед генерацией машинного кода
Я изучаю JVM, используя отличную книгу Oracle JRockit: The Definite Guide. Одна вещь, которую я на самом деле не понимаю, это необходимость JIT-компилятора переводить байт-код в другое промежуточное представление (IR), оптимизировать их и затем переводить в нативный код.
Согласно Википедии, байт-код - это уже тип IR. Почему JIT-компилятор в JRockit не оптимизирует байт-код напрямую? Я предполагаю, что на байт-коде выполнить оптимизацию сложнее, чем на другом IR (например, C), но я совсем не уверен.
1 ответ
Некоторые оптимизации зависят от целевой архитектуры (набора команд и т. Д.) И, следовательно, невозможны для байт-кода, который не зависит от архитектуры.