интерпретатор Java выполняет преобразование / перевод перед выполнением кода строка за строкой? - PullRequest
0 голосов
/ 22 сентября 2018

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

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

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

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

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

0 голосов
/ 22 сентября 2018

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

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

Как правило, они имеют часть переводчика.Тот, кто пинает первым: он читает байт-код и напрямую его интерпретирует.В прямом смысле этого названия виртуальная машина Java !

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

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

...