Википедия и некоторые другие сайты описывают интерпретаторы как переводчики, которые переводят код с одного языка высокого уровня на язык низкого уровня. Однако есть много объяснений, в том числе в stackoverflow, где говорится, что интерпретатор напрямую выполняет инструкцию, принятую в качестве входной, без предварительного преобразования. Итак, интерпретатор - это переводчик, такой как компиляторы, или исполнитель, такой как CPU?
Ваше предположение неверно (или, по крайней мере, слишком упрощенно): исполняемый файл java не является интерпретатором языка Java, это виртуальная машина, которая обрабатывает байт-код, который, по сути, является машинным кодом для этой виртуальной машины.
Принимает ли байт-код и запускает собственный код, чтобы делать то же самое, а не преобразовывать на лету?




Это очень многое зависит.
Вы должны понимать, что современные реализации jvm - это большие и мощные инструменты.
Обычно в них есть часть переводчика. Этот срабатывает первым: он читает байтовый код и напрямую его интерпретирует. В прямом смысле его названия Виртуальная машина Java!
Но как только конкретный код выполняется многократно (то есть много тысяч повторений), включаются так называемые своевременные компиляторы. Они переводят байтовый код в собственный машинный код и выполняют всевозможные оптимизации производительности, такие как встраивание методов.
Таким образом, такие jvms выполняют обе вещи, о которых вы упомянули в своем вопросе.
Когда вы компилируете код Java, вы превращаете его в Байт-код Java. Когда вы выполняете свою программу Java, вы фактически вызываете виртуальную машину Java для интерпретации байт-кода Java. JVM интерпретирует байт-код Java и генерирует из него байт-код, зависящий от платформы, который затем может быть выполнен платформой.
Это упрощенное объяснение того, что он делает, но он делает гораздо больше: как сказал @GhostCat, среди прочего, он иногда компилирует блоки кода, которые часто выполняются, и сохраняет скомпилированную версию (в виде зависящего от платформы байта -code), чтобы не интерпретировать его каждый раз (это называется JIT-компиляцией).
Это делает Java гибридом между компиляцией и интерпретацией: исходный код - это составлен для байтового кода Java, но тогда этот байт-код Java - это истолкованный на конкретной платформе.
Хорошее дополнение к другому ответу!
«Википедия и некоторые другие сайты описывают интерпретаторы как переводчики, которые переводят код с некоторого языка высокого уровня на язык низкого уровня». Где об этом говорится в Википедии?