Java Virtual Machine

В статье не хватает ссылок на источники (см. рекомендации по поиску).

Информация должна быть проверяема, иначе она может быть удалена. Вы можете отредактировать статью, добавив ссылки на авторитетные источники в виде сносок. (28 июня 2010)

|

Информация в этой статье или некоторых её разделах устарела.

Вы можете помочь проекту, обновив её и убрав после этого данный шаблон. (19 января 2014)

|

В другом языковом разделе есть более полная статья Java virtual machine (англ.).

Вы можете помочь проекту, расширив текущую статью с помощью перевода

|

JVM

Разработчик |  Sun Microsystems
Разрядность |  32 (64 с Java 9)
Представлена |  1996
Версии |  18.0.1.1[1]
Тип |  Стековая машина, с выделенным доступом к памяти
Порядок байтов |  Big-endian
Регистры
Общего назначения |  Стек операндов для каждого метода (до 65535 операндов), и локальные переменные метода (до 65535)
Медиафайлы на Викискладе
Обзор архитектуры JVM на базе версии Java SE 7

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).

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

## Содержание

* 1 Спецификация JVM
* 2 Конкуренция между Sun и Microsoft
* 3 Разногласия между Sun и IBM
* 4 Среда исполнения
* 5 См. также
* 6 Примечания
* 7 Литература
* 8 Ссылки

## Спецификация 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 — «Microsoft Java VM» — ориентированная только на платформу «Windows» и, по утверждениям Microsoft, «специально оптимизированная для быстрого выполнения Java-кода на платформе „Windows“.»

Однако «Microsoft Java VM» не была полностью совместима со спецификацией, описанной Sun в «голубой книге JVM», и имела существенные проблемы с производительностью при работе под большими нагрузками (при большом числе одновременно выполняемых потоков) и с безопасностью.

Компания «Sun» посчитала такую ситуацию недопустимой и решила, что Microsoft занимается намеренной дискредитацией и профанацией платформы «Java» путём распространения своей версии виртуальной машины Java, обладающей вышеперечисленными недостатками. На этом основании Sun неоднократно подавала в суд на Microsoft — и Microsoft была лишена следующих прав на реализацию:

1. Называть её «Java VM» (новое название — «Microsoft VM»);
2. Встраивать её в поставки браузеров и операционных систем (в том числе Internet Explorer и Windows) — но с сохранением права предлагать для скачивания на сайте;
3. Разрабатывать её новые версии и обновления;
4. Предоставлять её для скачивания на сайте.

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

## Разногласия между Sun и IBM

[править | править код]

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

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

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

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

## Среда исполнения

[править | править код]

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

Виртуальная машина JVM исполняет файлы «.class» и «.jar», эмулируя данные в них инструкции следующими путями:

* Интерпретирование;
* Использование JIT-компилятора (например, такого как «HotSpot» от Sun Microsystems).

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

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

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

## См. также

[править | править код]

* Parrot — виртуальная машина, используемая интерпретируемыми языками для эффективного исполнения байт-кода.
* Список виртуальных машин Java

## Примечания

[править | править код]

1. ↑ Релизные версии JDK (англ.). Java (2 мая 2022). Дата обращения: 24 мая 2022. Архивировано 4 июня 2022 года.

## Литература

[править | править код]

* Бенджамин Дж. Эванс, Джеймс Гоф, Крис Ньюленд. Java: оптимизация программ. Практические методы повышения производительности приложений в JVM. — М.: Диалектика, 2019. — 448 с. — ISBN 978-5-907114-84-5.

## Ссылки

[править | править код]

* The Java™ Virtual Machine Specification — Спецификация JVM
* JSR 924: Java™ Virtual Machine Specification Java SE 7 Edition
* The Java® Virtual Machine Specification, 2015

Виртуальные машины Java (сравнение[англ.])

Sun, Oracle|

* HotSpot
* KVM
* OpenJDK
* Maxine[англ.]

Основные реализации|

* JamVM
* Jikes RVM[англ.]
* IBM J9

Встраиваемые|

* CEE-J (Skelmir)
* JamaicaVM
* Mika VM
* Mysaifu
* Squawk (Sun)

Другие|

* CACAO
* IcedTea[англ.]
* JX
* ещё…

Неподдерживаемые|

* Apache Harmony
* Dalvik
* Excelsior JET[англ.]
* GCJ
* IKVM.NET
* JRockit
* Kaffe
* Microsoft JVM[англ.]
* SableVM
* Jupiter[англ.]
* ещё…[англ.]

Java

Платформы|

* Java Card
* Java ME
* Java SE
* Java EE

Технологии Sun|

* Java
* Java Development Kit
* OpenJDK
* WTK
* Java Virtual Machine
* JavaFX
* JAXP
* Squawk

Основные сторонние технологии|

* GNU Classpath
* GNU Compiler for Java
* Kaffe
* TopLink[англ.]
* Apache Harmony
* Apache Struts
* Spring Framework
* Dalvik
* Hibernate
* JBoss
* Processing
* AspectJ

История|

* История версий Java SE
* История версий Java EE
* Критика Java
* Java Community Process
* Sun Microsystems
* Свободные реализации Java[англ.]

Свойства языка|

* Байткод
* Синтаксис[англ.]
* Модель памяти
* Апплеты
* Сервлеты
* Мидлеты
* JavaServer Pages
* Web Start
* Enterprise JavaBeans

Скриптовые языки|

* Jython
* JRuby
* BeanShell
* Groovy
* Judoscript[англ.]
* Bean Scripting Framework
* Yoix[англ.]
* Rhino

Конференции Java|

* JavaOne[англ.]
* Devoxx[англ.]

*[М.]: Москва