Вопрос-ответ

What is the difference between JDK and JRE?

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

Примечание редакции: Этот вопрос задавался в 2009 году, когда мир был другим. В 2022 году стандартный OpenJDK с открытым исходным кодом доступен только для JDK.



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

Каковы их роли и когда я должен использовать тот или иной вариант?

Переведено автоматически
Ответ 1

JRE - это среда выполнения Java. Это пакет всего необходимого для запуска скомпилированной Java-программы, включая виртуальную машину Java (JVM), библиотеку классов Java, java команду и другую инфраструктуру. Однако его нельзя использовать для создания новых программ.

JDK - это Java Development Kit, полнофункциональный SDK для Java. В нем есть все, что есть в JRE, но также компилятор (javac) и инструменты (такие как javadoc и jdb). Он способен создавать и компилировать программы.

Обычно, если вас интересует только запуск Java-программ на компьютере, вы устанавливаете только JRE. Это все, что вам нужно. С другой стороны, если вы планируете заниматься программированием на Java, вам необходимо установить JDK вместо этого.

Иногда, даже если вы не планируете заниматься какой-либо разработкой на Java на компьютере, вам все равно нужно установить JDK. Например, если вы развертываете веб-приложение с использованием JSP, технически вы просто запускаете Java-программы внутри сервера приложений. Тогда зачем вам JDK? Потому что сервер приложений преобразует JSP в Java-сервлеты и должен использовать JDK для компиляции сервлетов. Я уверен, что есть еще примеры.

Ответ 2

Приведенный выше ответ (Пабло) очень правильный. Это просто дополнительная информация.

JRE - это, как следует из названия, среда. По сути, это набор каталогов с файлами, связанными с Java, а именно:


  • bin/ содержит исполняемые программы Java. Наиболее важной является java (и для Windows, javaw также), которая запускает JVM. Здесь также есть некоторые другие утилиты, такие как keytool и policytool.

  • conf/ содержит редактируемые пользователем файлы конфигурации, с которыми могут работать эксперты Java.

  • lib/ имеет большое количество вспомогательных файлов: некоторые .jarфайлы, конфигурационные файлы, файлы свойств, шрифты, переводы, сертификаты и т.д. – все "наработки" Java. Наиболее важным является modules файл, содержащий .class файлы стандартной библиотеки Java.

  • На определенном уровне стандартная библиотека Java должна вызывать машинный код. Для этой цели JRE содержит некоторые .dll (Windows) или .dylib (macOS) или .so (Linux) файлы под bin/ или lib/ с поддерживающим системным собственным двоичным кодом.

JDK также представляет собой набор каталогов. Это надмножество JRE с некоторыми дополнениями:


  • bin/ пополнился инструментами разработки. Наиболее важными из них являются javac; другие включают jar, javadoc и jshell.

  • jmods/ добавлен файл JMOD, который содержит файлы стандартной библиотеки. Эти файлы позволяют использовать стандартную библиотеку с jlink.

Ответ 3

введите описание изображения здесь


JDK является надмножеством JRE и содержит все, что есть в JRE, плюс такие инструменты, как компиляторы и отладчики, необходимые для разработки апплетов и приложений. JRE предоставляет библиотеки, виртуальную машину Java (JVM) и другие компоненты для запуска апплетов и приложений, написанных на языке программирования Java.


Ответ 4

In layman terms: JDK is grandfather JRE is father and JVM is their son.
[i.e. JDK > JRE > JVM ]


JDK = JRE + Инструменты разработки / отладки


JRE = JVM + классы пакетов Java (такие как util, math, lang, awt, swing и т.д.) + библиотеки времени выполнения.


JVM = система загрузки классов + область данных среды выполнения + механизм выполнения.


Другими словами, если вы программист на Java, вам понадобится JDK в вашей системе, и этот пакет также будет включать JRE и JVM, но если вы обычный пользователь, которому нравится играть в онлайн-игры, тогда вам понадобится только JRE, и в этом пакете не будет JDK.

JVM :

Виртуальная машина Java (JVM) - это виртуальная машина, на которой выполняются байт-коды Java. JVM не понимает исходный код Java, поэтому вы компилируете свои файлы * .java для получения файлов * .class, которые содержат байт-коды, понятные JVM. Это также сущность, которая позволяет Java быть "переносимым языком" (писать один раз, запускать где угодно). Действительно, существуют конкретные реализации JVM для разных систем (Windows, Linux, macOS, смотрите список в Википедии ..), цель состоит в том, чтобы с одинаковыми байт-кодами все они давали одинаковые результаты.

JDK и JRE

Чтобы объяснить разницу между JDK и JRE, лучше всего прочитать документацию Oracle и ознакомиться со схемой :

Среда выполнения Java (JRE)

Среда выполнения Java (JRE) предоставляет библиотеки, виртуальную машину Java и другие компоненты для запуска апплетов и приложений, написанных на языке программирования Java. Кроме того, частью JRE являются две ключевые технологии развертывания: Java Plug-in, который позволяет запускать апплеты в популярных браузерах; и Java Web Start, который развертывает автономные приложения по сети. Это также основа технологий платформы Java 2 Enterprise Edition (J2EE) для разработки и развертывания корпоративного программного обеспечения. JRE не содержит инструментов и утилит, таких как компиляторы или отладчики для разработки апплетов и приложений.

Набор для разработки Java (JDK)

JDK является надмножеством JRE и содержит все, что есть в JRE, плюс такие инструменты, как компиляторы и отладчики, необходимые для разработки апплетов и приложений.

Обратите внимание, что Oracle не единственная, кто предоставляет JDK.

Процесс компиляции JIT (любезно предоставлено: документация Oracle)

JDK > JRE > JVM

введите описание изображения здесь

java