Проприетарные реализации
Azul VM — сегментированная Java Virtual Machine, основанная на оригинальной микропроцессорной архитектуре, оптимизированной для работы с Java. Возможно использование до 54 микропроцессоров и до терабайт памяти без накладных расходов на сборку мусора.
CEE-J реализация Java-технологии с нуля без лицензирования от Sun.
Excelsior JET (с компилятором AOT)
Hewlett-Packard, Java для HP-UX, OpenVMS, Tru64 и Reliant (Tandem) UNIX-платформ
J9 (IBM), для AIX, Linux, MVS, OS/400, Pocket PC, z/OS
Apogee предоставляет встроенную Java, использующую IBM J9 и библиотеку классов Apache Harmony для X86/ARM/MIPS/PowerPC, работающих под Linux/LynxOS/WinCE.
Jbed, (Esmertec) — Java VM с поддержкой реального времени для встроенных систем и программно-аппаратных комплексов, работающих с Интернет[1]
JamaicaVM, (aicas) — Java VM c поддержкой приложений реального времени. Предназначена для встроенных систем
JBlend, (Aplix) реализация Java ME
JRockit (изначально разрабатываемая BEA Systems) приобретена корпорацией Oracle для Linux, Windows и Solaris
Mac OS Runtime for Java (MRJ)
MicroJvm (IS2T — Industrial Smart Software Technology) Широкий спектр виртуальных машин предназначенных для встроенных систем (в том числе систем жесткого реального времени), ARM7, ARM9, AVR, AVR32, PPC, MIPS, …
Microsoft Java Virtual Machine (поддержка прекращена в 2001 году)
OJVM (иногда также «JServer») от Oracle Corporation
PERC (Aonix/Atego) Java реального времени для встраиваемых систем
SAPJVM (SAP) лицензированная у Sun и модифицированная Sun JVM, портированная на платформы, поддерживаемые ПО SAP NetWeaver. Поддерживает Java 5 и частично Java 6 compatible (Windows i386, x64, IA64, Linux x86, IA64, PPC, AIX PPC, HP-UX Sparc/IA64, Solaris Sparc/x86_64, i5/OS PPC)
Свободные и открытые реализации
HotSpot
AegisVM
Apache Harmony
CACAO
Dalvik
IcedTea
IKVM.NET
Jamiga
JamVM
Jaos
Jato VM
JC
Jelatine JVM
JESSICA (Java-Enabled Single-System-Image Computing Architecture)
Jikes RVM
JNode (operating system)
JOP (Аппаратная реализация JVM)
Juice
Jupiter
JX
Kaffe
leJOS
Maxine (meta-circular JVM being developed by SUN)
Mika VM
Mysaifu (Windows CE / Windows Mobile)
NanoVM
SableVM
Squawk virtual machine (for embedded system and small devices)
SuperWaba
TakaTuka (for wireless sensor network devices)
TinyVM
VMkit of Low Level Virtual Machine
Wonka VM
Xam
Краткая Java-терминология • Виртуальная машина (virtual machine) – абстрактное вычислительное устройство, которое может быть реализовано разными способами: аппаратно или программно. Компиляция в набор команд виртуальной машины происходит почти так же, как и компиляция в набор команд микропроцессора.
• Java-платформа (Java Platform) – виртуальная машина Java и стандартные классы составляют Java-платформу. Java-платформа предоставляет программам унифицированный интерфейс независимо от операционной системы, на которой они работают.
• Java Remote Method Invocation (JRMI) – интерфейс вызова удаленных методов. Распределенная объектная модель, определяющая, каким образом производится вызов удаленных методов, работающих на другой виртуальной машине Java.
• Java Runtime Environment (JRE) – среда исполнения Java. Подмножество Java Development Kit, предназначенное для конечных пользователей. JRE состоит из виртуальной машины Java (JVM), стандартных классов Java и вспомогательных файлов.
• Java Virtual Machine (JVM) – виртуальная машина Java, часть среды исполнения Java, выполняющая интерпретацию Java байт-кода. Java Virtual Machine специфицируется набором команд байт-кода, набором регистров, стеком, сборщиком мусора и пространством хранения методов.
• Java байт-код (Java bytecode) – машинно-независимый код, который генерирует Java-компилятор. Байт-код выполняется Java-интерпретатором. Виртуальная машина Java полностью стековая: не требуется сложная адресация ячеек памяти и большое количество регистров. Поэтому команды JVM короткие, большинство из них имеет длину 1 байт, отчего команды JVM называют байт-кодами (bytecodes), хотя имеются команды длиной 2 и 3 байта (средняя длина команды составляет 1,8 байта). Программа, написанная на языке Java, переводится компилятором в байт-код. Байт-код записывается в одном или нескольких файлах, может храниться во внешней памяти или передаваться по сети. Это особенно удобно благодаря небольшому размеру файлов с байт-кодом. Полученный в результате компиляции байт-код можно выполнять на любом компьютере, имеющем систему, реализующую JVM (в не зависимости от типа какого-либо конкретного процессора и архитектуры ПК). Так реализуется принцип Java: «Write once, run anywhere» – «Написано однажды, выполняется где угодно».
• Java-апплеты (Java applets) – Java-приложения, доступ к которым можно получить из веб-браузера.
Java Community Process (JCP) — сформированный в 1998 году формальный процесс, который позволяет заинтересованным лицам участвовать в формировании будущих версий спецификаций платформ языка Java.
JSR
Основа JCP — так называемые JSR (Java Specification Request/Запрос на Спецификацию Java), формальные документы, описывающие спецификации и технологии, которые предлагается добавить к Java платформе.
Разработка JSR включает следующие шаги:
Запрос (Initiation). Спецификация предлагается членами сообщества, и, путем голосования, принимается Исполнительным Комитетом (JCP Executive Committee). В это время JSR присваивается номер.
Черновик для сообщества (Community Draft). После принятия JSR формируется экспертная группа, которая разрабатывает первый черновик спецификации. Этот черновик выносится на рассмотрение Исполнительного Комитета и членов сообщества. По итогам обсуждения выносится решение о том, переходить к следующей стадии, или необходим новый доработанный Community Draft.
Открытый черновик (Public Draft). Черновик, дошедший до этой стадии, выкладывается в свободный доступ, и любой человек, имеющий доступ к сети Интернет, может рассмотреть его и высказать свое мнение. Экспертная группа использует эти отзывы для дальнейшего совершенствования спецификации. После этого доработанная спецификация выносится на голосование Исполнительного Комитета для окончательного утверждения. К этому времени становятся доступными Эталонная реализация (reference implementation) и набор автоматических тестов Technology Compatibility Kit (TCK).
Поддержка (Maintenance). Окончательная версия спецификации, эталонной реализации и TCK обновляется по мере поступления запросов на доработку, уточнение и расширение. Некоторые запросы могут потребовать пересмотра спецификации экспертной группой и выпуска новой версии, или даже формирования нового JSR.
Области данных виртуальной машины Java
Стек (Java Stack)
Каждый поток виртуальной машины Java имеет свой собственный стек, созданный в момент создания потока. Стек содержит кадры виртуальной машины и является эквивалентом стека в обычном языке, таком как C. Он содержит локальные переменные и результаты промежуточных вычислений, а также активно используется механизмом вызова и возврата из методов.
Динамически распределяемая область (Heap)
Виртуальная машина Java имеет динамически распределяемую область (heap), общую для всех ее потоков. Это область, из которой динамически выделяется память для всех экземпляров классов и массивов. Она создается при старте виртуальной машины.
Регистр pc (pc Register)
Виртуальная машина Java может поддерживать множество потоков(нитей, threads) исполнения одновременно. Каждый такой поток имеет свой собственный регистр pc (program counter). В любой момент времени поток виртуальной машины исполняет код одного метода, являющегося текущим для данного потока. Если этот метод не является native, регистр pc содержит адрес инструкции виртуальной машины, исполняющейся в данный момент. В противном случае его значение не определено. Размер этого регистра соответствует размеру типа word.
Область методов (Method Area)
Виртуальная машина Java имеет область методов (method area), общую для всех ее потоков. Эта область аналогична области компилированного кода в обычных языках программирования или сегменту "TEXT" в процессе UNIX. В ней хранятся информационные структуры классов - область констант, поля и данные методов, а также код методов и конструкторов, включая специальные. Эта область создается при старте виртуальной машины.
Область констант (Constant Pool)
Область констант - это специфическое представление для каждого класса или интерфейса таблицы constant_pool в class-файле Java. Она содержит несколько типов констант, начиная от числовых литералов, известных во время компиляции до ссылок на поля и методы, которые должны быть разрешены во время исполнения. Эта область выполняет функцию, аналогичную символьной таблице в обычном языке программирования.
Стеки для native-методов (Native Method Stacks)
Реализация виртуальной машины Java может использовать такие стеки для поддержки native-методов, т.е. методов, написанных не на языке Java. Также они могут быть использованы для реализации эмулятора инструкций виртуальной машины Java в таких языках, как например C.