JVM (Java Virtual Machine) предоставляет абстрактный уровень между байт-кодом Java и аппаратной частью/операционной системой.
Компиляция в байт-код: Java-код компилируется в универсальный байт-код (.class). Этот байт-код не зависит от конкретной архитектуры процессора или операционной системы.
java
Интерпретация или JIT-компиляция: JVM, установленная на конкретной операционной системе, выполняет этот байт-код.
java
Абстракция аппаратного уровня: JVM скрывает особенности работы с памятью, потоками ввода-вывода и другими ресурсами, предоставляя стандартизированный интерфейс для Java-кода.
Таким образом, один и тот же байт-код может быть выполнен на любой платформе (операционной системе), для которой существует реализация JVM. Это и есть принцип "Write Once, Run Anywhere".
Таблица сравнения:
| Аспект | Нативный код (например, C++) | Байт-код Java + JVM |
|---|---|---|
| Зависимость от ОС | Высокая (компилируется под конкретную ОС) | Низкая (байт-код универсален) |
| Компиляция | Единоразово в машинный код | Сначала в байт-код, затем JIT-компиляция или интерпретация JVM |
| Портативность | Низкая | Высокая |
| Выполнение | Напрямую на железе | Внутри виртуальной машины (JVM) |