Когда мы говорим интерпретировать, это означает перевод этого байт-кода в машиночитаемый код (иначе компиляция)?
Нет, это означает интерпретировать. Подумайте о гигантском операторе switch, включающем сам код операции, где каждый case извлекает требуемые операнды, если таковые имеются, из байт-кода, а затем непосредственно выполняет код, необходимый для реализации каждого кода операции. Например, рассмотрим iadd
< /а>:
case IADD:
push(pop()+pop());
break;
Итак, если JVM «скомпилирует» байт-код в машиночитаемый код
Это не так.
и JIT делают в основном одно и то же (преобразование байт-кода в машиночитаемый код (компиляция в противном случае)), каковы преимущества использования JIT?
Во-первых, термин JIT устарел с версии Java 1.3. Теперь у нас есть HotSpot JVM, своего рода высокооптимизирующий JIT, который выборочно преобразует горячие точки в байтовом коде в машинный код, используя технологию, обычно присутствующую только в высокооптимизирующем компиляторе. , тогда как ранние JIT (а) были сторонними продуктами и (б) разбрызгивали машинный код для любого байтового кода, который встречался без разбора.
Во-вторых, интерпретация != компиляция, как отмечалось выше. Если HotSpot заметит, что определенный фрагмент байт-кода выполняется большую часть времени, он скомпилирует его в машинный код, чтобы он мог выполняться напрямую без интерпретации.
person
user207421
schedule
01.08.2017