Что такое JVM, если JIT выполняет преобразование байт-кода в машинные инструкции

Я действительно пытаюсь понять следующее:

Раньше я знаю:

Когда скомпилирована Java-программа, будет создан файл .class. В этом коде находится в виде байтов. Затем JVM преобразует этот байтовый код в понятный для машины формат.

Теперь я вижу в один из вопросов в SO

Компилятор Just-In-Time (JIT) - это функция времени выполнения интерпретатор, который вместо интерпретации байт-кода каждый раз, когда метод вызывается, будет компилировать байт-код в машинный код инструкции работающей машины

Итак, здесь JIT преобразует байт-код в машинные инструкции. Тогда что такое использование JVM. Мы можем сделать это с JIT. Насколько мне известно, JIT предназначен только для повышения производительности JVM.

Спасибо заранее.

Ответ 1

JIT - это просто часть JVM. Другие части включают в себя интерпретатор байт-кода, методы проверки загрузки классов и связывания, а также поддержку встроенного кода для таких вещей, как отражение, ввод-вывод и т.д.

В этом смысле JIT не позволяет JVM работать быстрее. Вместо этого он заставляет Java-код работать быстрее... чем если бы JVM просто интерпретировал его.

В действительности, JVM действительно начинает интерпретировать байт-коды. Спустя некоторое время JVM использует свой JIT-компилятор для компиляции сильно используемых методов в собственный код, используя статистику, собранную при интерпретации для настройки кода для данной проблемы.

Кстати, эта часть текста, которую вы цитировали, неуклюжна и технически неточна:

Компилятор Just-In-Time (JIT) - это функция интерпретатора времени выполнения... (контекст)

Фактически, JIT не является признаком интерпретатора. Скорее, JIT - это функциональность JVM, которая работает вместе с интерпретатором.

Ответ 2

Чтобы быть ясным:

JVM выполняет все как:

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

ЛТ

Когда JVM компилирует файл класса, он не заполняет полный класс файл; он компилирует только часть его по необходимости. Это позволяет избежать тяжелых синтаксический анализ полного исходного кода. Этот тип компиляции называется JIT или Just-In-Time. JVM - зависимая генерация кода (OS) JIT - платформа Oriented, генерирует собственный байтовый код, поэтому он быстрее, чем JVM:)

Ответ 3

Он компилирует его как раз для JVM с оптимизацией.

Ответ 4

Виртуальная машина Java (JVM) предоставляет всю среду для запуска программы Java. Он интегрируется с операционной системой, загружает классы и запускает программы. Компилятор Just-In-Time (JIT) - это всего лишь небольшая часть, которая может быть отключена (-Xint), но когда она включена, обеспечивает полезное улучшение производительности. Были реализации JVM, которые не включали JIT, и реализации, которые работали с предварительной компиляцией Java на машинный код так же, как традиционные языки, такие как C или С++.