Я слышал, что люди говорят, что «JVM обязательно является интерпретатором Java, но интерпретатор Java не обязательно является JVM». Это правда?Разница между Java-интерпретатором и JVM
Я имею в виду разницу между Java-интерпретатором и JVM?
Я слышал, что люди говорят, что «JVM обязательно является интерпретатором Java, но интерпретатор Java не обязательно является JVM». Это правда?Разница между Java-интерпретатором и JVM
Я имею в виду разницу между Java-интерпретатором и JVM?
Да, есть разница.
Java виртуальная машина:
Программное обеспечение «исполнительный механизм», который безопасно и согласованно выполняет байт-коды в файлах классов Java на микропроцессоре (будь то в компьютере или в другом электронном устройстве).
Java интерпретатор:
модуль, который поочередно декодирует и выполняет каждый оператор в некоторой части кода. Java-интерпретатор декодирует и исполняет байт-код для виртуальной машины Java.
Переводчик Java на самом деле является частью JVM. Виртуальная машина не просто выполняет байт-коды, но и имеет множество задач. Эта полноценная среда упоминается как JVM.
Проверил:
Во-первых, код (теоретически) любого языка может быть скомпилирован с помощью байт-кодов JVM, чтобы разрешить выполнение в этой среде. Java-интерпретатор способен запускать Java-код.
Я думаю, что это неправильно. Насколько я знаю, интерпретатор Java больше не связан с Java, чем JVM. Фактически код Java-языка традиционно компилируется, после чего это байтовый код, который интерпретируется и/или иным образом выполняется в/из JVM. –
При вызове JVM неверный интерпретатор Java. JVM - это JIT-компилятор, который компилирует и запускает байт-код. Другие языки могут быть скомпилированы в байт-код, предназначенный для JVM. Wikipedia article detailing such languages.
Это не совсем так. JVM будет запускать код в интерпретированном режиме некоторое время, прежде чем решать, какие биты компилировать. Итак, да, JVM - это интерпретатор Java Bytecode (класс файла). – dty
@ Danny: Нет «JVM». Существует несколько реализаций JVM от разных поставщиков на разных платформах, которые не всегда работают одинаково. –
Эй, я был не первым, кто упомянул «JVM»! Зависит от того, что вы подразумеваете под «работать одинаково». Все они выполняют байт-код и предоставляют сопоставление с базовыми функциями ОС, такими как потоки, файлы и т. Д. Некоторые из них не имеют JIT (что добавит к моему аргументу, что «JVM является компилятором JIT» является неточным), некоторые из них имеют разные модели потоков (по сравнению с старой моделью m: n JRockit), некоторые имеют разные алгоритмы GC, но все они по существу делают то же самое. Но НЕ ТОЧНО сказать: «JVM - компилятор JIT». – dty
Как я понимаю ...
Java-интерпретатор выполняет строки байтового кода в качестве команд, которые должны выполняться. Выполняется байт-код.
JVM принимает байтовый код и генерирует машинный код. Байт-код скомпилирован в машинный код и выполняется машинный код.
** A ** JVM необязательно должен включать компилятор JIT. Некоторые из них, включая JIT-компилятор, имеют возможность отключить его. '-Xint' на моем. – JeremyP
виртуальная машина Java представляет собой виртуальный процессор и интерпретатор Java является Java tool.thanks
Отредактируйте свой ответ, чтобы добавить ценную информацию и ссылки. –
Проще говоря, JVM интерпретирует байт-код и интерпретатор Java интерпретирует Java. Они разные, потому что байт-код и Java - это разные языки.
Bytecode - это низкоуровневый язык, такой как машинный код. Байт-код предназначен для запуска программой, называемой интерпретатором байт-кода, также называемой виртуальной машиной . Назначение байт-кода должно быть легко интерпретировать.
Java - это язык более высокого уровня, такой как C или Python. Эти языки также могут быть интерпретированы: вы просто пишете программу, которая может запускать свой код. Он не должен включать байт-код. Просто языки более высокого уровня сложнее интерпретировать напрямую.
Java обычно интерпретируется путем перевода программы Java в программу байт-кода. Затем виртуальная машина Java Virtual Machine (JVM) запускает байт-код.
Но вы можете интерпретировать любой язык таким образом. JVM может интерпретировать другие языки, если вы переводили их в правый байт-код.
Вы также можете интерпретировать язык программирования без какого-либо байт-кода. Некоторые интерпретаторы BASIC просто ищут инструкции BASIC в исходном коде и выполняют их. Сначала они не делают новую программу на другом языке. Если бы вы сделали то же самое для Java, это был бы интерпретатор Java, но не JVM.
«Переводчик Java на самом деле является частью JVM». Вы имеете в виду, что интерпретатор Java * bytecode * является частью JVM ... потому что JVM даже не видит Java-код. – flow2k
Хотя это и не совсем корректно, потому что, как вы сказали, JVM - это больше, чем просто интерпретатор - он оптимизирует свой JIT-компилятор, который в противном случае сделал бы Java несостоятельным для приложений с производительностью empahsis. – flow2k