Java Virtual Machine

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Виртуальная машина Java»)
Перейти к: навигация, поиск

Java Virtual Machine (сокращенно Java VM, JVM) — виртуальная машина Java — основная часть исполняющей системы Java, так называемой Java Runtime Environment (JRE). Виртуальная машина Java интерпретирует байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования. Например, исходный код на языке Ada может быть откомпилирован в байт-код Java, который затем может выполниться с помощью JVM.

JVM является ключевым компонентом платформы Java. Так как виртуальные машины Java доступны для многих аппаратных и программных платформ, Java может рассматриваться и как связующее программное обеспечение, и как самостоятельная платформа. Использование одного байт-кода для многих платформ позволяет описать Java как «скомпилировано однажды, запускается везде» (compile once, run anywhere).

Спецификация JVM[править | править вики-текст]

В 1996-м году компания Sun выпустила первую версию документа «Голубая книга JVM», в котором описана спецификация виртуальной машины Java, ставшего де-факто отраслевым стандартом платформы Java. Благодаря этому документу появились альтернативные реализации JVM, являющиеся «разработками с чистого листа» (англ. clean room design). В качестве примера можно привести Kaffe.

Начиная с версии J2SE 5.0 изменения в спецификации JVM вырабатываются в соответствии с формализованными пожеланиями заинтересованных сторон. Процесс внесения изменений в спецификации JVM называется Java Community Process.

JVM, доступная в исходных текстах на Си от фирмы Sun называется KVM (Kilo Virtual Machine) и доступна на их сайте.

Конкуренция между Sun и Microsoft[править | править вики-текст]

В начале развития платформы Java существовали две конкурирующие реализации Java VM — одна от фирмы Sun Microsystems, создателя языка Java, для различных платформ (Windows, Mac OS, Unix), и другая — от фирмы Microsoft, ориентированная только на платформу Windows и, по утверждениям Microsoft, «специально оптимизированная для быстрого выполнения Java-кода на платформе Microsoft Windows».

Однако, Microsoft JVM была не полностью совместима со спецификацией, описанной Sun в голубой книге JVM, а также имела существенные проблемы с производительностью при работе под большими нагрузками (при большом числе одновременно выполняемых потоков) и с безопасностью. Компания Sun посчитала такую ситуацию недопустимой и решила, что Microsoft занимается намеренной дискредитацией и профанацией платформы Java путем распространения своей версии виртуальной машины Java, обладающей вышеперечисленными недостатками. На этом основании Sun неоднократно подавала в суд на Microsoft и добилась сначала того, что Microsoft потеряла право называть свою реализацию JVM Java VM. С этого момента Microsoft стала называть свой продукт просто Microsoft VM. Затем Microsoft потеряла право встраивать свою VM в браузеры и операционные системы. После этого Microsoft вынуждена была изъять свою VM из поставки Windows и из пакета IE, но могла, согласно решению суда, предлагать её отдельно для скачивания на сайте. Затем Sun добилась прекращения разработки новых версий Microsoft VM и прекращения выпуска обновлений к ней, а затем и снятия Microsoft VM из списка доступных для скачивания программ на сайте Microsoft.

Некоторые обозреватели компьютерных изданий полагают, что жесткая позиция, занятая Sun по вопросу Java, могла послужить дополнительным стимулом для разработки компанией Microsoft собственного Windows-платформенного решения — «.NET Framework».

Разногласия между Sun и IBM[править | править вики-текст]

В 2001 году, с целью разработки стандарта кросс-платформенных Desktop-приложений, IBM стартовала открытый проект Eclipse.

Фреймворк Eclipse был основан на предыдущей закрытой разработке IBM VisualAge. IBM удалось сбалансировать интересы свободного сообщества и интересы бизнеса (свои интересы) в лицензии Eclipse Public License, признанной организацией FSF.

Проект успешно развивается, используется в индустрии, в значительной степени отделился от IBM в самостоятельный (см. Eclipse Foundation).

Sun остаётся в оппозиции к Eclipse Foundation, также как и Microsoft. Формально основной причиной противоречий остается библиотека SWT, которая противоречит Sun-концепции виртуальной машины и переносимости Java-приложений.

Среда исполнения[править | править вики-текст]

Программы, предназначенные для запуска на JVM, должны быть скомпилированы в стандартизированном переносимом двоичном формате, который обычно представляется в виде файлов .class. Программа может состоять из множества классов, размещенных в различных файлах. Для облегчения размещения больших программ, часть файлов вида .class могут быть упакованы вместе в так называемый .jar файл (сокращение от Java Archive).

Виртуальная машина JVM исполняет файлы .class или .jar, эмулируя инструкции, написанные для JVM, путем интерпретирования или использования just-in-time компилятора (JIT), такого, как HotSpot от Sun microsystems. В наши дни JIT компиляция используется в большинстве JVM в целях достижения большей скорости. Существуют также ahead-of-time компиляторы, позволяющие разработчикам приложений прекомпилировать файлы классов в родной для конкретной платформы код.

Как и большинство виртуальных машин, Java Virtual Machine имеет stack-ориентированную архитектуру, свойственную микроконтроллерам и микропроцессорам.

JVM, которая является экземпляром JRE (Java Runtime Environment), вступает в действие при исполнении программ Java. После завершения исполнения, этот экземпляр удаляется сборщиком мусора. JIT является частью виртуальной машины Java, которая используется для ускорения выполнения приложений. JIT одновременно компилирует части байт-кода, которые имеют аналогичную функциональность, и, следовательно, уменьшает количество времени, необходимого для компиляции.

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]