Java Virtual Machine
JVM | |
---|---|
Разработчик | Sun Microsystems |
Разрядность | 32 (64 с Java 9) |
Представлена | 1994 |
Версии | 18.0.1.1[1] |
Тип | Стековая машина, с выделенным доступом к памяти |
Порядок байтов | Big-endian |
Регистры | |
Общего назначения | Стек операндов для каждого метода (до 65535 операндов), и локальные переменные метода (до 65535) |
Медиафайлы на Викискладе |
В статьене хватаетссылок на источники(см.рекомендации по поиску). |
Информация в этой статье или некоторых её разделахустарела. |
В другом языковом разделеесть более полная статьяJava virtual machine(англ.). |
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-компиляция часто исполняемых фрагментов байт-кода вмашинный код.
Спецификация JVM
[править|править код]В1996году компанияSunвыпустила первую версию документа «Голубая книга JVM», в котором описанаспецификациявиртуальной машины Java, ставшего де-фактоотраслевым стандартомплатформы Java. Благодаря этому документу появилисьальтернативныереализации JVM, являющиеся «разработками с чистого листа» (англ.clean room design). В качестве примера можно привестиKaffe.
Начиная с версииJ2SE5.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 была лишена следующих прав на реализацию:
- Называть её «Java VM» (новое название — «Microsoft VM»);
- Встраивать её в поставкибраузеровиоперационных систем(в том числеInternet Explorerи Windows) — но с сохранением права предлагать для скачивания на сайте;
- Разрабатывать её новые версии и обновления;
- Предоставлять её для скачивания на сайте.
Некоторые обозреватели компьютерных изданий полагают, что жёсткая позиция, занятая 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
Примечания
[править|править код]- ↑Релизные версии JDK(англ.).Java(2 мая 2022). Дата обращения: 24 мая 2022.Архивировано4 июня 2022 года.
Литература
[править|править код]- Бенджамин Дж. Эванс, Джеймс Гоф, Крис Ньюленд.Java: оптимизация программ. Практические методы повышения производительности приложений в JVM. —М.:Диалектика,2019. — 448 с. —ISBN 978-5-907114-84-5.