2010-08-09 4 views

ответ

15

Да, есть разница.

Java виртуальная машина:

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

Java интерпретатор:

модуль, который поочередно декодирует и выполняет каждый оператор в некоторой части кода. Java-интерпретатор декодирует и исполняет байт-код для виртуальной машины Java.

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

Проверил:

+0

«Переводчик Java на самом деле является частью JVM». Вы имеете в виду, что интерпретатор Java * bytecode * является частью JVM ... потому что JVM даже не видит Java-код. – flow2k

+0

Хотя это и не совсем корректно, потому что, как вы сказали, JVM - это больше, чем просто интерпретатор - он оптимизирует свой JIT-компилятор, который в противном случае сделал бы Java несостоятельным для приложений с производительностью empahsis. – flow2k

0

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

+0

Я думаю, что это неправильно. Насколько я знаю, интерпретатор Java больше не связан с Java, чем JVM. Фактически код Java-языка традиционно компилируется, после чего это байтовый код, который интерпретируется и/или иным образом выполняется в/из JVM. –

0

При вызове JVM неверный интерпретатор Java. JVM - это JIT-компилятор, который компилирует и запускает байт-код. Другие языки могут быть скомпилированы в байт-код, предназначенный для JVM. Wikipedia article detailing such languages.

+1

Это не совсем так. JVM будет запускать код в интерпретированном режиме некоторое время, прежде чем решать, какие биты компилировать. Итак, да, JVM - это интерпретатор Java Bytecode (класс файла). – dty

+0

@ Danny: Нет «JVM». Существует несколько реализаций JVM от разных поставщиков на разных платформах, которые не всегда работают одинаково. –

+1

Эй, я был не первым, кто упомянул «JVM»! Зависит от того, что вы подразумеваете под «работать одинаково». Все они выполняют байт-код и предоставляют сопоставление с базовыми функциями ОС, такими как потоки, файлы и т. Д. Некоторые из них не имеют JIT (что добавит к моему аргументу, что «JVM является компилятором JIT» является неточным), некоторые из них имеют разные модели потоков (по сравнению с старой моделью m: n JRockit), некоторые имеют разные алгоритмы GC, но все они по существу делают то же самое. Но НЕ ТОЧНО сказать: «JVM - компилятор JIT». – dty

0

Как я понимаю ...

Java-интерпретатор выполняет строки байтового кода в качестве команд, которые должны выполняться. Выполняется байт-код.

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

+0

** A ** JVM необязательно должен включать компилятор JIT. Некоторые из них, включая JIT-компилятор, имеют возможность отключить его. '-Xint' на моем. – JeremyP

0

виртуальная машина Java представляет собой виртуальный процессор и интерпретатор Java является Java tool.thanks

+3

Отредактируйте свой ответ, чтобы добавить ценную информацию и ссылки. –

8

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

Bytecode - это низкоуровневый язык, такой как машинный код. Байт-код предназначен для запуска программой, называемой интерпретатором байт-кода, также называемой виртуальной машиной . Назначение байт-кода должно быть легко интерпретировать.

Java - это язык более высокого уровня, такой как C или Python. Эти языки также могут быть интерпретированы: вы просто пишете программу, которая может запускать свой код. Он не должен включать байт-код. Просто языки более высокого уровня сложнее интерпретировать напрямую.

Java обычно интерпретируется путем перевода программы Java в программу байт-кода. Затем виртуальная машина Java Virtual Machine (JVM) запускает байт-код.

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

Вы также можете интерпретировать язык программирования без какого-либо байт-кода. Некоторые интерпретаторы BASIC просто ищут инструкции BASIC в исходном коде и выполняют их. Сначала они не делают новую программу на другом языке. Если бы вы сделали то же самое для Java, это был бы интерпретатор Java, но не JVM.

Смежные вопросы