Является ли JVM компилятором или интерпретатором?


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

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

7 67

7 ответов:

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

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

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

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

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

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

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

3)what exactly is the JVM?-- Ans:

  • JVM-это виртуальная платформа, которая находится в вашей оперативной памяти
  • компонент класс погрузчик нагрузки .class файл в оперативную память
  • The верификатор байтового кода компонент в JVM проверяет, есть ли какие-либо нарушения ограничений доступа в вашем коде. (Это одна из основных причин, почему java является безопасным)
  • далее Исполнение Двигателя компонент преобразует байт-код в исполняемый машинный код

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

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

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

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

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

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

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

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

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

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

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

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

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

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