JVM (Java Virtual Machine) – это виртуальная машина, которая выполняет Java байт-код. Она позволяет запускать Java программы на любой платформе без необходимости перекомпиляции исходного кода.
Существует несколько различных реализаций JVM, некоторые из них включают:
1. Oracle HotSpot JVM – самая популярная реализация JVM, которая разрабатывается и поддерживается компанией Oracle.
2. OpenJ9 – реализация JVM, разработанная и поддерживаемая компанией IBM.
3. GraalVM – инновационная реализация JVM, предлагающая новые возможности для оптимизации и выполнения Java приложений.
4. Zing JVM – коммерческая реализация JVM, разработанная компанией Azul Systems с акцентом на высокую производительность и масштабируемость.
5. SUN JVM – исторически первая реализация виртуальной машины Java.
Каждая из этих реализаций имеет свои особенности и преимущества, и выбор конкретной зависит от конкретной ситуации и требований проекта.
В 1996 году компания Sun выпустила первую версию документа «Голубая книга JVM», в котором описана спецификация виртуальной машины Java, ставшего де-факто отраслевым стандартом платформы Java. Благодаря этому документу появились альтернативные реализации JVM, являющиеся «разработками с чистого листа».
Начиная с версии J2SE 5.0, изменения в спецификации JVM вырабатываются в соответствии с формализованными пожеланиями заинтересованных сторон. Процесс внесения изменений в спецификации JVM называется Java Community Process.
JVM, доступная в исходных текстах на Си от фирмы Sun, называется KVM (Kilo Virtual Machine) и доступна на их сайте.
Программы, предназначенные для запуска на 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 одновременно компилирует те части байт-кода, функциональность которых аналогична, — что сокращает время, необходимое для проведения компиляции.