Является ли Java-компилятор частью JVM? - PullRequest
0 голосов
/ 03 декабря 2018

Я читал некоторые посты о JVM и нашел некоторую запутанную информацию.

, например, здесь: http://www.cs.cmu.edu/~jcarroll/15-100-s05/supps/basics/history.html

он говорит: «На самом деле, компилятор Java часто называют компилятором JVM(для виртуальной машины Java) ".

Более того, я не смог найти точный ответ, является ли компилятор Java частью JVM или нет.Я знаю, что JVM является интерпретатором, но я читал, что он также выполняет некоторую компиляцию.Кроме того, насколько я знаю, JVM является частью JRE;javac часть JDK и JRE часть JDK.

Так является ли javac частью JVM?Я думаю, что нет, но не уверен, хотя.

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

Тем временем я нашел это изображение, которое точно показывает, где находится компилятор java и что он является частью JDK, но не частью JVM или JRE:

Diagram

0 голосов
/ 03 декабря 2018

Некоторые JVM будут выполнять JIT (Just in Time) компиляции для оптимизации байтового кода Java.Кроме того, это можно сделать в коде

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler ();

однако традиционно компилятор был частью JDK, а приложения распространялись с JRE, который не содержит javac

0 голосов
/ 03 декабря 2018

Хотя «компилятор Java часто называют компилятором JVM (для виртуальной машины Java)» может вводить в заблуждение, он по-прежнему имеет место, поскольку javac по существу преобразует исходный код Java в байт-код для запуска JVM, который затем интерпретирует его в машиночитаемую инструкциюв зависимости от платформы

Поскольку javac является компилятором для JVM, он не является его частью.

Но, как утверждает Ghostcat, упоминание javac в качестве компилятора JVM вводит в заблуждение, поскольку у JVM есть свой собственный Just-Временная компиляция реализации

Надеюсь, что это добавляет к предыдущим ответам

0 голосов
/ 03 декабря 2018

Это в основном терминология, формулировка.

Существует двоичный исполняемый файл java (и некоторые его тонкие варианты, такие как javaw).Это виртуальная машина Java!Вы запускаете этот двоичный файл, и JVM запускается (см. здесь для всех деталей славы).

По сути:

  • JRE содержит JVM (вышеупомянутый java бинарный)
  • JDK содержит JVM, и инструменты и библиотеки для разработки для Java (т. е. java и javac)

Наконец: использование термина "JVM compiler" для javac неверно и вводит в заблуждение.javac превращает исходный код Java в байт-код Java, который затем может быть выполнен JVM.Но для полной реализации: большинство реализаций JVM также содержат компонент компиляции «точно в срок» для преобразования байтового кода в машинный код для повышения производительности.

...