Я слышал, как люди говорили: «JVM - это обязательно интерпретатор Java, но интерпретатор Java не обязательно является JVM». Это правда?
Я имею в виду, есть ли разница между интерпретатором Java и JVM?
Да, разница есть.
Виртуальная машина Java:
Программный «механизм выполнения», который безопасно и совместимо выполняет байтовые коды в файлах классов Java на микропроцессоре (будь то в компьютере или в другом электронном устройстве).
Интерпретатор Java:
Модуль, который поочередно декодирует и выполняет каждый оператор в некоторой части кода. Интерпретатор Java декодирует и выполняет байт-код для виртуальной машины Java.
Интерпретатор Java фактически является частью JVM. Виртуальная машина не просто выполняет байт-коды, у нее много задач. Эта полноценная среда называется JVM.
Проверка:
Например, код (теоретически) любого языка может быть скомпилирован до байт-кода JVM, чтобы обеспечить выполнение в этой среде. Интерпретатор Java может запускать только код Java.
Как я понимаю...
Интерпретатор Java выполняет строки байт-кода как команды для выполнения. Байт-код выполняется.
JVM принимает байт-код и генерирует машинный код. Байт-код компилируется в машинный код, и машинный код выполняется.
Вызывать JVM интерпретатором Java некорректно. JVM - это JIT-компилятор, который компилирует и запускает байтовый код. Другие языки могут быть скомпилированы в байт-код, предназначенный для JVM. Статья в Википедии с подробным описанием таких языков.