Является ли программа 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 с ним.