JVM, JRE и JDK: в чём разница
В начале изучения Java вы быстро столкнётесь с тремя похожими аббревиатурами: JVM, JRE и JDK. Они звучат похоже, но означают разное. Проще всего запомнить их как вложенные слои: JDK содержит JRE, а JRE содержит JVM.
Компоненты Java: JVM, JRE и JDK
Что такое JVM (виртуальная машина Java)?
JVM — это компонент, который выполняет Java-программы. Она исполняет байт-код — файлы .class, которые компилятор создаёт из исходного кода. У каждой платформы (Windows, Linux, macOS) своя JVM, поэтому один и тот же байт-код работает везде без изменений — именно это делает Java платформонезависимой. JVM также управляет памятью через сборщик мусора и использует JIT-компиляцию, преобразуя «горячие» участки кода в нативный машинный код во время выполнения.
Что такое JRE (среда выполнения Java)?
JRE — это всё, что нужно, чтобы запускать Java-приложения, но не разрабатывать их. Она состоит из JVM и стандартных библиотек классов (коллекции, ввод-вывод, работа с сетью и т.д.), на которые программы опираются во время выполнения. Компилятора и инструментов разработчика в JRE нет.
Обратите внимание: начиная с Java 11, Oracle больше не поставляет отдельный JRE. JDK распространяется самостоятельно, а минимальную среду выполнения при необходимости собирают из JDK с помощью инструмента jlink.
Что такое JDK (комплект разработчика Java)?
JDK — это полный набор инструментов для разработки Java-приложений. Он включает всё, что есть в JRE (то есть JVM и библиотеки), плюс компилятор (javac), запускатор (java), инструмент документации (javadoc), архиватор (jar), отладчик и другие утилиты. Если вы пишете код на Java — устанавливать нужно именно его.
Как связаны JVM, JRE и JDK
Эти три компонента образуют вложенные слои: JDK — внешний (разработка), внутри него JRE (выполнение), в центре — JVM (исполнение). Коротко: вы пишете код, javac из JDK компилирует его в байт-код, а JVM этот байт-код выполняет.
| Компонент | Что входит | Назначение | Когда нужен |
|---|---|---|---|
| JVM | Движок выполнения | Исполняет байт-код; память, JIT | Всегда (выполняет любую Java-программу) |
| JRE | JVM + стандартные библиотеки | Запуск Java-приложений | Чтобы запускать, но не разрабатывать |
| JDK | JRE + компилятор и инструменты | Разработка Java-приложений | Чтобы писать и компилировать код |
Часто задаваемые вопросы
Чем отличается JDK от JRE?
JRE позволяет только запускать Java-программы (это JVM плюс библиотеки). JDK позволяет их разрабатывать — он включает всё, что есть в JRE, плюс компилятор и инструменты разработчика.
Что мне нужно — JRE или JDK?
Если вы изучаете или пишете Java, устанавливайте JDK. JRE отдельно хватает только для запуска готовых приложений, а с Java 11 он и не поставляется отдельно.
Входит ли JVM в JDK?
Да. JDK содержит JRE, а JRE содержит JVM. Установив JDK, вы получаете все три.
Можно ли запустить Java без JDK?
Для запуска программы нужна только среда выполнения (исторически — JRE). Но чтобы скомпилировать файлы .java в байт-код, нужен компилятор javac, который входит в JDK.
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии