На этом уроке мы базово рассмотрим понятия JDK, JRE и JVM, а также их взаимосвязь и ключевые отличия.
JVM
JVM (сокр. от англ. «Java Virtual Machine») — это виртуальная/абстрактная машина, которая позволяет компьютеру запускать и выполнять Java-программы.
При запуске Java-программы, компилятор Java (javac) компилирует исходный Java-код в промежуточное представление — платформенно-независимый байт-код. Затем виртуальная машина Java (JVM) читает полученный байт-код и переводит его в нативный, платформенно-зависимый машинный код (набор инструкций), который в дальнейшем напрямую выполняется центральным процессором — CPU.
Примечание: JVM также может выполнять (интерпретировать) программы написанные на различных языках программирования, но скомпилированные в Java байт-код.
Существует множество реализаций JVM (а также JRE и JDK) для разных аппаратных и программных платформ, поскольку конфигурации у разных ОС — разные.
Java является кроссплатформенным языком программирования, так как код на Java ориентирован не на физическую машину с её специфическим набором машинных кодов, а на JVM. Поскольку JVM выполняет платформенно-независимый Java байт-код на любой платформе, на которой установлена, Java является платформенно-независимой (или «кроссплатформенным») языком программирования.
Этапы выполнения Java-программы
JRE
JRE (сокр. от англ. «Java Runtime Environment») — среда выполнения Java; набор программного обеспечения, необходимый для исполнения Java-приложений, который обязательно включает в себя реализацию JVM и библиотеки Java-классов (Стандартную библиотеку Java), а также может содержать другие компоненты.
JRE — это надмножество над JVM.
JRE предназначена для того, чтобы запускать программы на Java, но не разрабатывать их (JRE не включает в себя компилятор, а лишь исполняет предварительно скомпилированный Java байт-код посредством реализации JVM).
JDK
JDK (сокр. от англ. «Java Development Kit») — это набор программных инструментов, необходимых для разработки Java-приложений. При скачивании JDK, автоматически загружается и JRE (а значит, и JVM). В JDK, помимо JRE, также содержится ряд инструментов разработки — компиляторы, отладчики, JavaDoc и т.д.
JDK — это надмножество над JRE.
Диаграмма взаимосвязи между JVM, JRE и JDK
Ключевые моменты
JVM, JRE и JDK являются платформенно-зависимыми, поскольку конфигурации разных ОС — разные.
Язык Java является платформенно-независимым, так как Java-приложение, скомпилированное однажды, может выполняться на любом устройстве, на котором установлено JRE с соответствующими зависимостями.
JDK является надмножеством над JRE, а JRE — надмножеством над JVM.
Реализации JVM обеспечивают выполнение (интерпретацию) байт-кода Java.