Ответ
JVM реализует принцип «Write Once, Run Anywhere» через два ключевых абстракции: байт-код и виртуальную среду выполнения.
Механизм:
- Платформенно-независимый байт-код: Исходный Java-код компилируется в байт-код (инструкции для виртуальной машины), а не в машинный код конкретного процессора. Файлы
.classодинаковы для всех ОС. - Платформенно-зависимая JVM: Для каждой операционной системы (Windows, Linux, macOS) существует своя реализация JVM. JVM отвечает за трансляцию универсального байт-кода в нативные команды и системные вызовы конкретной ОС.
Что абстрагирует JVM:
- Управление памятью и потоками (создание нативных тредов).
- Файловая система (разделители путей, права доступа).
- Сетевые взаимодействия (сокеты).
- Графический интерфейс (через AWT/Swing, который использует нативные компоненты).
Пример:
File file = new File("test.txt");
// Байт-код операции одинаков. JVM для Windows вызовет WinAPI,
// а JVM для Linux — системные вызовы ядра (например, open()).
Итог: Разработчик пишет код один раз против API JVM, а производители JVM (Oracle, Amazon, Azul) обеспечивают его запуск на разных платформах.