В чем разница между 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)