Является ли программа java.exe виртуальной виртуальной машиной?
JDK поставляется с программой java.exe(для окон). Вы можете использовать его для запуска программ из командной строки.
Википедия говорит, что это "загрузчик классов" и "интерпретатор для файлов классов".
Является ли это фактическим полномасштабным JVM? Это "меньшая, легкая" JVM? Это что-то еще?
Ответы
Ответ 1
JVM выполняет обе эти задачи по определению и требованию.
В зрелой реализации, включая HotSpot, JVM делает гораздо больше, включая компиляция Just-In-Time (как это считается полезной), но она все равно должна загружать и интерпретировать файлы классов и Java bytecode. Знание этого должно облегчить путаницу в отношении статьи с использованием "переводчика"; он объясняет концептуальную задачу и не должен восприниматься как меньший или легкий.
То есть java/javaw
запускает полную JVM в стандартной среде Oracle/OpenJDK.
Ответ 2
java.exe
- это просто пусковая установка VM. Он создает виртуальную машину и запускает ее. JVM, расположенный в jvm.dll(или libjvm.so в Linux).
Я работаю с OpenJDK (не в команде OpenJDK) и могу рассказать вам больше деталей, если вы заинтересованы.
Ответ 3
java.exe
передает ваши файлы классов в JVM, чтобы он мог выполнять JIT и интерпретировать код. java.exe
сам по себе не является виртуальной машиной, нет. Он запускает один и предоставляет для него все необходимые данные.
Чтобы скомпилировать код, вы должны использовать javac.exe
.
Предположим, что у вас есть код класса Test.java
, теперь его необходимо скомпилировать:
javac Test.java
Компилятор выведет Test.class
скомпилированный файл, который содержит байт-код JVM.
Теперь, чтобы выполнить его на JVM, вы запустите
java Test
который находит точку входа в доступных файлах .class
и передает JVM с ним.