Является ли виртуальная машина Java действительно виртуальной машиной в том же смысле, что и мой файл VMWare или Parallels? - PullRequest
23 голосов
/ 14 мая 2009

Является ли виртуальная машина Java действительно виртуальной машиной в том же смысле, что и мой файл VMWare или Parallels?

Ответы [ 3 ]

30 голосов
/ 14 мая 2009

номер

VMWare и остальные виртуализируют аппаратное обеспечение машины. Операционная система, работающая внутри контейнера VMWare (или Parallels, или контейнеры виртуализации Windows, или Bochs, или ...), имеет различную степень осведомленности о работе в виртуализированном контейнере. В VMWare операционная система не подозревает, что она работает в виртуальном контейнере. Операционная система не изменяется вообще, хотя обычно устанавливаются специализированные драйверы (особенно видео) для предотвращения проблем с производительностью. Некоторые другие виртуальные машины не выполняют полную аппаратную виртуализацию и вместо этого требуют, чтобы ОС внутри контейнера выполняла специальные вызовы контейнера вместо обычных аппаратных вызовов.

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

JVM называется виртуальной машиной, поскольку определение JVM определяет абстрактную машину. Это включает в себя регистры, стек и т. Д., А байт-код, в который компилируется исходный код Java, является практически машинным кодом для этой виртуальной машины. Затем JVM интерпретирует или компилирует этот байт-код в машинные инструкции.

Различие состоит в том, что JVM представляет собой виртуализированный процессор , а другие виртуальные машины - виртуализированные машины (включая видеокарту, сеть и другие внешние устройства и аппаратные регистры).

7 голосов
/ 14 мая 2009

Нет. Существует разница между системной виртуальной машиной и виртуальной машиной процесса. JVM - это виртуальная машина процесса, в то время как VMWare и подобные ей являются системными виртуальными машинами. Для получения дополнительной информации, пожалуйста, обратитесь к записи в Википедии .

Что касается параллельных виртуальных машин, то вышеупомянутые состояния входа

PVM (параллельная виртуальная машина) не строго виртуальные машины, как приложения, работающие сверху, все еще имеют доступ ко всем службам ОС, и поэтому не ограничивается системой Модель предоставлена ​​компанией "ВМ".

3 голосов
/ 14 мая 2009

В разделе «Запуск Xen: практическое руководство по искусству виртуализации» содержится приличное краткое изложение различий, данное Джанной Мэттьюс и соавт. ( Amazon ). VMWare является примером полной виртуализации и стремится виртуализировать физическую аппаратную архитектуру, чтобы на ней могли работать различные немодифицированные гостевые операционные системы. Виртуальная машина Java является примером того, что они называют виртуализация приложений , где «Приложения запускаются в виртуальной среде выполнения, которая предоставляет стандартный API для кроссплатформенного выполнения и управляет потреблением приложения локальных ресурсов». (стр. 13)

В обоих случаях у вас есть уровень виртуализации, поверх которого работает программное обеспечение. JVM запускает Java-приложения, а VMWare - полнофункциональные операционные системы. VMWare виртуализирует машину, которая всегда выражалась как физическое оборудование. JVM виртуализирует машину, которая может быть выражена в физическом оборудовании, но почти не всегда (но см. аппаратные JVM ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...