JVM (Java Virtual Machine)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:30, 15 ноября 2016.

Java Virtual Machine — виртуальная машина 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

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

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

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

Обзор архитектуры JVM на базе версии Java SE 7

Конфликты

Конкуренция между Sun и Microsoft

1113.sdt-blog-microsoft.jpg

В начале развития платформы «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».[2]

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

Sun performance banner.serendipityThumb.gif

В 2001 году, с целью разработки стандарта кросс-платформенных Desktop-приложений, 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-компилятора (англ. just-in-time; например, такого как «HotSpot» от Sun Microsystems).

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

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

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

Загрузка и установка виртуальной машины Java

Чтобы пользоваться программным обеспечением, написанным на языке программирования Java или разрабатывать свои собственные программы, понадобится скачать и установить на компьютер виртуальную машину Java - Java Virtual Machine, или сокращённо JVM.

Для программирования на Java можно подобрать себе IDE, хорошим выбором будет NetBeans или Eclipse.

Для начала проверим, установлена ли Java платформа на вашем компьютере. Для этого запустите удобным для вас способом утилиту для работы с командной строкой. Например, перейдите в меню "Пуск" пункт "Выполнить", в появившемся окошке введите команду "cmd" без кавычек и нажмите "ОК".

Вы увидите приглашение командной строки с мигающим курсором. Введите дословно и без кавычек команду "java -version" и нажмите Enter.

Если на компьютере уже установлена исполняемая среда Java, вывод будет примерно таким:

java version "1.6.0_18"

Java(TM) SE Runtime Environment (build 1.6.0_18-b07)

Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode)

Обратите внимание на первую строку - "1.6.0_18", это и есть версия JVM.

Если вывод будет сообщать об ошибке или неизвестной команде, вам безусловно необходима установка виртуальной машины. Также рекомендуется обновить установку, если версия Java на вашем компьютере ниже чем 1.6.

Есть два продукта для загрузки:

  • JRE - Java Runtime Environment, предоставляет виртуальную машину и API, подходит, если вы хотите использовать готовые программы на Java.
  • JDK - Java Development Kit, предоставляет виртуальную машину, API и средства разработки программ на Java, необходима, если вы планируете писать свои Java программы.[4]

Примечания

  1. JVM [Электронный ресурс] : Материал из Википедии — свободной энциклопедии: — Режим доступа:https://ru.wikipedia.org/wiki/Java_Virtual_Machine
  2. JVM [Электронный ресурс] : Материал из https://www.jcp.org/en/home/index^ — Режим доступа: https://www.jcp.org/en/jsr/detail?id=924
  3. JVM [Электронный ресурс] : Материал из http://docs.oracle.com/en/: — Режим доступа: http://docs.oracle.com/javase/specs/
  4. JVM [Электронный ресурс] : Материал из https://hightech.in.ua/: — Режим доступа: https://hightech.in.ua/content/art-java-virtual-machine-install