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