Выполняет ли интерпретатор Java преобразование / перевод перед выполнением кода построчно?

Википедия и некоторые другие сайты описывают интерпретаторы как переводчики, которые переводят код с одного языка высокого уровня на язык низкого уровня. Однако есть много объяснений, в том числе в stackoverflow, где говорится, что интерпретатор напрямую выполняет инструкцию, принятую в качестве входной, без предварительного преобразования. Итак, интерпретатор - это переводчик, такой как компиляторы, или исполнитель, такой как CPU?

«Википедия и некоторые другие сайты описывают интерпретаторы как переводчики, которые переводят код с некоторого языка высокого уровня на язык низкого уровня». Где об этом говорится в Википедии?

sepp2k 22.09.2018 14:44

Ваше предположение неверно (или, по крайней мере, слишком упрощенно): исполняемый файл java не является интерпретатором языка Java, это виртуальная машина, которая обрабатывает байт-код, который, по сути, является машинным кодом для этой виртуальной машины.

Mark Rotteveel 22.09.2018 14:44

Принимает ли байт-код и запускает собственный код, чтобы делать то же самое, а не преобразовывать на лету?

Peter Lawrey 22.09.2018 15:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это очень многое зависит.

Вы должны понимать, что современные реализации jvm - это большие и мощные инструменты.

Обычно в них есть часть переводчика. Этот срабатывает первым: он читает байтовый код и напрямую его интерпретирует. В прямом смысле его названия Виртуальная машина Java!

Но как только конкретный код выполняется многократно (то есть много тысяч повторений), включаются так называемые своевременные компиляторы. Они переводят байтовый код в собственный машинный код и выполняют всевозможные оптимизации производительности, такие как встраивание методов.

Таким образом, такие jvms выполняют обе вещи, о которых вы упомянули в своем вопросе.

Когда вы компилируете код Java, вы превращаете его в Байт-код Java. Когда вы выполняете свою программу Java, вы фактически вызываете виртуальную машину Java для интерпретации байт-кода Java. JVM интерпретирует байт-код Java и генерирует из него байт-код, зависящий от платформы, который затем может быть выполнен платформой.

Это упрощенное объяснение того, что он делает, но он делает гораздо больше: как сказал @GhostCat, среди прочего, он иногда компилирует блоки кода, которые часто выполняются, и сохраняет скомпилированную версию (в виде зависящего от платформы байта -code), чтобы не интерпретировать его каждый раз (это называется JIT-компиляцией).

Это делает Java гибридом между компиляцией и интерпретацией: исходный код - это составлен для байтового кода Java, но тогда этот байт-код Java - это истолкованный на конкретной платформе.

Хорошее дополнение к другому ответу!

GhostCat 26.09.2018 06:04

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