В чём разница между jdk, jre и jvm?

Есть три понятия - jdk, jre и jvm. Все эти понятия относятся к java, но в чём их разница?

P.S

Это мой вопрос + мой ответ, просьба не минусовать за "не отражает стремление разобраться", я старался, писал подробный ответ.


Ответы (1 шт):

Автор решения: Зонтик

JVM

Расшифровывается как Java Virtual Machine (виртуальная машина java). Она нужна для запуска уже скомпилированного кода (байт-кода), который хранится в файлах .class. jvm входит в состав jrejre пойдёт речь дальше) и является как иногда говорят "сердцем jre" или если говорить более серьёзно, ключевым компонентом jre.

JRE

Расшифровывается как Java Runtime Environment (среда выполнения java). jre нужна для запуска уже готовых программ. jre включает в себя jvm и всё, что нужно для запуска java-программ. jre содержит в себе стандартные java-библиотеки (например, java.util, java.awt, java.io, все их не перечислить, их много).

Если кратко, то:

jre = jvm + библиотеки

JDK

Расшифровывается как Java Development Kit (комплект для разработки на java). jdk включает в себя jre и инструменты для разработки. Что за инструменты? Все их я перечислять не буду, но вот некоторые из них:

  • javac (компилятор)
  • jdb (отладчик)
  • javadoc (утилита для генерации документации по коду)
  • serialver (утилита для генерации поля serialdVersionUID)
  • многие другие...

Все эти инструменты не нужны пользователю java-приложений, но нужны разработчику.

Если кратко, то:

jdk = jvm + библиотеки + инструменты для разработки

Но тоже самое можно записать даже короче:

jdk = jre + инструменты разработки

P.S

Моей целью было рассказать, в чём разница между jdk, jre,jvm и вообще объяснить, что это такое и зачем оно надо, ведь лично я иногда вижу среди новичков путаницу в этих понятиях. Прошу не докапываться до деталей, которые связаны с тем, что в java 11+ вроде как выпускается только jdk (я в этом не уверен, поэтому про это не писал, но если это так, прошу не писать, что "ответ устарел").

→ Ссылка