JDK, JRE и JVM: ключевые различия и как они работают вместе
Что такое Java Development Kit (JDK)?
JDK — это полный набор инструментов, позволяющий разработчикам писать, компилировать, отлаживать и запускать Java-приложения. Включает компилятор (javac), базовые библиотеки классов и набор утилит: отладчик, JavaDoc и др. Доступен для Windows, macOS, Linux, Solaris; на одной машине могут сосуществовать несколько версий.
Что такое Java Runtime Environment (JRE)?
JRE — среда выполнения, позволяющая запускать Java-программы. Включает JVM, базовые библиотеки и вспомогательные файлы. Пользователям, которым не нужна разработка, достаточно установить JRE вместо полного JDK.
Что такое Java Virtual Machine (JVM)?
JVM — движок, интерпретирующий или JIT-компилирующий Java-байткод в нативный машинный код. Ядро Java-платформы, обеспечивающее платформонезависимое выполнение, управление памятью и безопасность.
Зачем нужен JDK?
- Содержит компилятор, отладчик, запускатель для построения приложений.
- Позволяет генерировать байт-код, запускаемый на любой JVM.
- Предоставляет инструменты для профилирования, анализа кода, документации.
Зачем нужен JRE?
- Готовая среда для запуска Java-приложений без накладных расходов на инструменты разработки.
- Содержит полный набор базовых библиотек, требуемых большинством программ.
- Идеален для конечных пользователей, которым нужно только запускать, а не разрабатывать ПО.
Зачем нужен JVM?
- Выполняет байт-код на любой платформе с совместимым JVM, реализуя обещание «write once, run anywhere».
- Имеет JIT-компилятор, оптимизирующий производительность во время выполнения.
- Управляет выделением памяти, сборкой мусора, проверками безопасности.
Ключевые особенности JDK
- Полный набор инструментов разработки: компилятор, отладчик, JavaDoc и др.
- Поддержка современных языковых возможностей (например, diamond operator
<>для дженериков). - Кроссплатформенность: установка на Windows, macOS, Linux, Solaris.
- Включает все компоненты JRE, являясь надмножеством.
Ключевые особенности JRE
- Содержит JVM и базовые библиотеки классов для запуска приложений.
- Предоставляет технологии развёртывания: Java Web Start, Java Plug-in.
- Включает сетевые и базы данных API: JDBC, RMI, JNDI.
- Не содержит инструменты разработки, что делает пакет лёгким.
Ключевые особенности JVM
- Интерпретирует байт-код или компилирует его с JIT для эффективного выполнения.
- Управляет памятью, сборкой мусора, политиками безопасности.
- Гибкая архитектура: загрузчик классов, область методов, куча, стеки.
- Независимость от железа: один байт-код работает на любой платформе с JVM.
Как работает JDK
JDK интегрирует JRE и добавляет инструменты разработки. Разработчик пишет код, javac компилирует в байт-код, а запускатель java стартует JVM для выполнения программы.
Как работает JRE
JRE содержит JVM, загрузчики классов и библиотеки времени выполнения. При запуске программы JVM загружает классы, верифицирует байт-код и выполняет его через интерпретатор или JIT-компилятор.
Как работает JVM
Основные компоненты JVM:
- Class Loader: загружает, связывает и инициализирует файлы классов.
- Method Area: хранит структуры классов, статические переменные, байт-код методов.
- Heap: хранит объекты и массивы, общие для всех потоков.
- Java Stacks: хранят локальные переменные и фреймы методов для каждого потока.
- PC Registers: отслеживают текущую инструкцию для каждого потока.
- Execution Engine: выполняет байт-код, используя JIT для горячих участков.
- Native Method Interface & Libraries: позволяют интеграцию с нативным кодом.
Сравнение JDK, JRE и JVM
| Компонент | Полное название | Назначение | Зависимость от платформы | Включённые инструменты |
|---|---|---|---|---|
| JDK | Java Development Kit | Полная среда разработки для Java-приложений. | Зависит от платформы | Компилятор, отладчик, JavaDoc и др. |
| JRE | Java Runtime Environment | Запуск Java-приложений: базовые библиотеки и JVM. | Зависит от платформы | Нет (только среда выполнения) |
| JVM | Java Virtual Machine | Выполнение байт-кода; платформонезависимое runtime. | Зависит от платформы (реализация) | Нет (только движок выполнения) |
java
- Понимание Java: JDK, JRE и JVM — подробное объяснение
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Java 10: единый репозиторий JDK (Consolidated JDK Forest)
- Java 10: Thread-Local Handshakes для ускорения VM safepoints
- Логирование в Java: лучшие практики для надежного кода