Примечание редакции: Этот вопрос задавался в 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.