Ответ 1
Нет.
VMWare, а остальные фактически виртуализируют аппаратное обеспечение машины. Операционная система, работающая внутри контейнера VMWare (или контейнеров виртуализации Parallels или Windows или Bochs или...), имеет разную степень осведомленности о работе в виртуальном контейнере. В VMWare операционная система не знает, что она работает в виртуальном контейнере. Операционная система вообще не изменена, хотя обычно устанавливаются специализированные драйверы (самое главное видео) для предотвращения проблем с производительностью. Некоторые другие виртуальные машины не выполняют полную аппаратную виртуализацию и вместо этого требуют, чтобы ОС внутри контейнера выполняла специальные вызовы в контейнере вместо обычных аппаратных вызовов.
JVM не является виртуальной машиной в этом смысле. Никакое оборудование, кроме процессора, не виртуализировано. JVM - это, по сути, виртуализованный процессор плюс такая же среда выполнения, которая включена в С++ или любой другой объектно-ориентированный язык, а также сбор мусора и другие предметы первой необходимости. Кроме того, конечно, файлы классов Java (и JAR файлы и т.д.) Не являются машинным кодом, а промежуточным байтовым кодом. Таким образом, JVM должен компилировать или интерпретировать файлы классов (независимо от того, содержится ли он в файле JAR или нет) во время выполнения, и имеет возможность загружать и находить новый код динамически во время выполнения.
JVM называется виртуальной машиной, поскольку определение JVM определяет абстрактную машину. Сюда входят регистры, стек и т.д., А байт-код, скомпилированный исходным кодом Java, является фактически машинным кодом для этой виртуальной машины. Затем JVM интерпретирует или компилирует этот байтовый код в инструкции на рабочем месте.
Разница заключается в том, что JVM - это виртуализированный процессор, а другие виртуальные машины - виртуализированные машины (включая видеокарту, сеть и другие внешние устройства и аппаратные регистры).