У меня очень простой вопрос о JVM: это компилятор или интерпретатор?
Если это интерпретатор, то как насчет JIT-компилятора, который существует внутри JVM?
Если нет, то что такое JVM? (Мне не нужно базовое определение jVM преобразования байтового кода в машинный код и т. Д.)
Ответы:
Во-первых, давайте разберемся со следующими терминами
Javac
это Java Compiler - компилирует ваш Java-код в байт-кодJVM
виртуальная машина Java - запускает / интерпретирует / переводит байт-код в собственный машинный кодJIT
is Just In Time Compiler - компилирует заданную последовательность инструкций байт-кода в машинный код во время выполнения перед ее выполнением изначально. Его основная цель - сильно оптимизировать производительность.Итак, давайте найдем ответы на ваши вопросы ..
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?
- Ответ:.class
файл в ОЗУ.Надеюсь, это вам помогло ..
источник
Это немного того и другого, но ни того, ни другого в традиционном смысле.
Современные JVM принимают байт-код и при первой необходимости компилируют его в машинный код. «JIT» в этом контексте означает «точно в срок». Он действует как интерпретатор извне, но на самом деле за кулисами он компилируется в машинный код.
JVM не следует путать с компилятором Java, который компилирует исходный код в байт-код. Поэтому нецелесообразно считать его «компилятором», но лучше знать, что в фоновом режиме он выполняет некоторую компиляцию.
источник
Как @delnan уже сказал в разделе комментариев, это ни то, ни другое .
JVM - это абстрактная машина, на которой работает байт-код Java .
JVM имеет несколько реализаций:
... и многие другие .
Большинство других ответов, когда речь идет о JVM, относятся либо к HotSpot, либо к некоторой смеси вышеперечисленных подходов к реализации JVM.
источник
.dex
код напрямую через интерпретацию или JIT-компиляцию ...» ( source.android.com/devices/tech/ota/ab/… )И то, и другое. Он начинается с интерпретации байт-кода и может (если решит, что это того стоит) затем скомпилировать этот байт-код в собственный машинный код.
источник
И то, и другое. Он может интерпретировать байт-код и компилировать его в собственный код.
источник
Как говорили другие, это и то, и другое! Если вы хотите сослаться на это подробно, то можете увидеть: Это описание IBM
источник
Javac - это компилятор, но не традиционный компилятор. Компилятор обычно преобразует исходный код в язык машинного уровня для выполнения, и это делается за один раз, т.е. весь код берется и конвертируется в язык машинного уровня ОДИН РАЗ. (подробнее об этом ниже). В то время как JavaC преобразует его в байт-код вместо языка машинного уровня.
JIT - это компилятор Java, но он также действует как интерпретатор. Типичный компилятор преобразует весь код сразу из исходного кода в язык машинного уровня. Вместо этого JIT идет построчно (построчное выполнение - это функция интерпретаторов) и преобразует байт-код, сгенерированный JavaC, в язык машинного уровня и выполняет его. JVM, в которой есть JIT, имеет несколько реализаций. Hotspot является одним из основных в программировании на Java. Реализация Hotspot позволяет JIT оптимизировать выполнение путем одновременного преобразования повторяющихся фрагментов кода в язык машинного уровня (например, компилятор, упомянутый выше), чтобы их можно было выполнять быстрее, вместо преобразования каждой строки кода 1 на 1. Итак, ответ не является черно-белым по отношению к типичным определениям компилятора и интерпретатора.
Это мое понимание после прочтения нескольких онлайн-ответов, блогов и т. Д. Если у кого-то есть предложения по улучшению этого понимания, пожалуйста, не стесняйтесь предлагать.
источник
В JVM есть как компилятор, так и интерпретатор. Потому что компилятор компилирует код и генерирует байт-код. После этого интерпретатор преобразует байт-код в машинно-понятный код.
Пример: напишите и скомпилируйте программу, и она будет работать в Windows. Переместите файл .class в другую ОС (Unix), и он будет работать благодаря интерпретатору, который преобразует байт-код в машинно-понятный код.
источник