Является ли JVM компилятором или интерпретатором? - PullRequest
75 голосов
/ 06 октября 2011

У меня очень простой вопрос о JVM: это компилятор или интерпретатор?

Если это интерпретатор, то как насчет JIT-компилятора, который существует внутри JVM?
Если нет, то что такое JVM? (Я не хочу, чтобы базовое определение jVM преобразования байт-кода в машинный код и т. Д.)

Ответы [ 7 ]

142 голосов
/ 05 февраля 2013

Во-первых, давайте иметь четкое представление о следующих терминах

Javac - это компилятор Java - компилирует ваш код Java в байт-код

JVM - это виртуальная машина Java - запускает / интерпретирует / переводит байт-код в собственный машинный код

JIT - это компилятор Just In Time - компилирует заданную последовательность инструкций байт-кода в машинный код в время выполнения перед его собственным выполнением. Его главная цель - сделать большую оптимизацию производительности.

Итак, давайте найдем ответы на ваши вопросы ..

1) JVM: is it a compiler or an interpreter? - Ответ: Переводчик

2) what about JIT compiler that exist inside the JVM? - Ответ: Если вы прочитали этот ответ полностью, вы, вероятно, знаете его сейчас

3) what exactly is the JVM? - Ответ:

  • JVM - это виртуальная платформа, которая находится в вашей оперативной памяти
  • Его компонент, Загрузчик классов загружает файл .class в ОЗУ
  • Компонент Байтовый код Verifier в JVM проверяет наличие каких-либо нарушений ограничения доступа в вашем коде. (Это одна из основных причин безопасности java)
  • Затем компонент Execution Engine преобразует Байт-код в исполняемый машинный код

Надеюсь, вам это помогло ..

30 голосов
/ 06 октября 2011

Это немного и то, и другое, но не в традиционном смысле.

Современные JVM берут байт-код и компилируют его в собственный код при первой необходимости.«JIT» в этом контексте означает «как раз вовремя».Он действует как интерпретатор извне, но на самом деле скрытно компилирует его в машинный код.

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

5 голосов
/ 05 августа 2017

Как @ delnan уже указано в разделе комментариев, это ни .

JVM - это абстрактная машина, работающая Javaбайт-код .

JVM имеет несколько реализаций:

  • HotSpot (интерпретатор + JIT компилятор)
  • Dalvik (интерпретатор + JIT-компилятор)
  • ART ( AOT компилятор + JIT-компилятор)
  • GCJ (компилятор AOT)
  • JamVM (переводчик)

... и многие другие .

Большинство других ответов, когда речь идет о JVM, относятся либо к HotSpot, либо к некоторому сочетанию вышеуказанных подходов к реализации JVM.

4 голосов
/ 06 октября 2011

Это оба.Он может интерпретировать байт-код и компилировать его в собственный код.

4 голосов
/ 06 октября 2011

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

1 голос
/ 15 февраля 2012

Как уже говорили другие, это оба! Если вы хотите сослаться на это подробно, вы можете увидеть: Это описание IBM

0 голосов
/ 01 мая 2012

JVM имеет как компилятор, так и интерпретатор. Потому что компилятор компилирует код и генерирует байт-код. После этого интерпретатор преобразует байт-код в машинно-понятный код.

Пример: написать и скомпилировать программу, и она будет работать в Windows. Перенесите файл .class в другую ОС (Unix), и он запустится из-за интерпретатора, который преобразует байт-код в машинно-понятный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...