В чем разница между JDK, JRE и JVM в Java?

«В чем разница между JDK, JRE и JVM в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Это три взаимосвязанных, но различных компонента Java-платформы:

  1. JVM (Java Virtual Machine)виртуальная машина. Это исполняемая среда, которая выполняет байт-код Java (.class файлы). Ее основные задачи:

    • Загрузка классов.
    • Верификация байт-кода.
    • Выполнение кода (интерпретация или JIT-компиляция).
    • Управление памятью (сборка мусора).
    • JVM — это то, что непосредственно запускает Java-программу.
  2. JRE (Java Runtime Environment)среда выполнения. Это набор для запуска Java-приложений. Включает:

    • JVM.
    • Библиотеки классов Java (Java Class Library, например, java.lang, java.util).
    • Другие вспомогательные файлы.
    • JRE = JVM + Библиотеки. Ее достаточно, чтобы запускать скомпилированные программы.
  3. JDK (Java Development Kit)комплект разработчика. Это набор для разработки Java-приложений. Включает:

    • JRE (а значит, и JVM).
    • Компилятор (javac).
    • Инструменты для разработки и отладки (javadoc, jdb, jar и др.).
    • JDK = JRE + Инструменты разработки. Необходим для написания и компиляции кода.

Итог:

  • Разработчик устанавливает JDK.
  • Пользователь, которому нужно только запустить приложение, устанавливает JRE.
  • JVM — это ядро, работающее внутри JRE.