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


928

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

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


12
Хороший и краткий ответ на этот вопрос можно найти по адресу: java.com/en/download/faq/techinfo.xml
Акшай Локур,


5
@kenorb, основанный на временных метках, связанный вопрос, кажется, дублирует этот.
Ungeheuer

Ответы:


1225

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

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

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

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


4
Затем, когда мы используем внешние банки, мы развертываем эти банки в jre / lib / ext / .. Так почему это ??
i2ijeya

2
Есть несколько jar, специально предназначенных для расширения Java; те могут и должны быть помещены в lib / ext. Но установка любых старых jar-файлов приложений - не то, для чего предназначен этот каталог; это злоупотребление механизмом расширения и может вызвать проблемы позже.
Карл Смотриц

Я работал над JExcel API и правильно установил classpath, но проблема все еще существует. Так что я развернул его в папке tlib / ext, которая прекрасно работает после этого ?? Так в чем же причина ??
i2ijeya

3
У меня нет информации, чтобы быть полностью уверенным, но я предполагаю, что либо вы не правильно установили classpath правильно, либо вы установили classpath для загрузчика классов, отличного от того, который в конечном итоге был использован в вашем коде. Что отличает lib / ext от расширения classpath, так это то, что lib / ext повлияет на любое Java-приложение, которое использует этот конкретный JRE - это более надежно, чем установка classpath.
Карл Смотриц

Пару недель назад я столкнулся с довольно серьезной ошибкой, которая была исправлена ​​путем изменения переменных среды JAVA_HOME и Path для ссылки на JRE вместо JDK. В каком случае приложение будет работать с использованием JRE и не работать с JDK? Думаю, мне следует открыть новый вопрос. Интересно отметить, что начиная с версии 1.6 JRE включается в установку JDK, но распаковывается на том же уровне, что и папка JDK, тогда как в версии 1.5 и ранее папка JRE находится в JDK. Кстати: хороший ответ!
Джесси Айви

143

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

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.

1
Означает ли это, что я могу установить свои переменные пути в JDK и все?
Брэди,

3
@Brady: Да, я так думаю. Это хорошо работает для меня, по крайней мере. Как разработчик, я практически игнорирую JRE. Если есть особые случаи, когда вы конкретно хотите JRE, я не знаю о них.
Карл Смотриц

JRE может работать только с скомпилированным кодом Java, верно?
SexyBeast

2
@Cupidvogel, поскольку в JRE нет компилятора, я думаю, вы могли бы так сказать. JRE предназначен для запуска (скомпилированного) Java-кода, а JDK также предоставляет вам инструменты для его разработки.
Карл Смотриц,

1
Таким образом, в основном JDK включает в себя компилятор (например, Javac) для компиляции кода, JRE (систему времени выполнения) для выполнения скомпилированного кода и другие инструменты, предназначенные только для того, чтобы сделать жизнь программиста простой в разработке, правильной? Так что AFAIU, только Javac и JRE являются действительно необходимыми инструментами здесь. Почему тогда, много раз, установки программного обеспечения, обновления требуют наличия JDK?
SexyBeast

131

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

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


3
Классная схема! Я немного запутался, что команда java изображена за пределами JRE, что не правильно. Я не понимаю, почему существуют отдельные файлы для команды java, когда установлен JDK, которые идентичны по крайней мере по размеру. В каком случае приложение будет работать с использованием JRE и не работать с JDK? Пережил это недавно и, вероятно, должен вернуться на прежний путь, чтобы повторить и докопаться до сути ...
Джесси Айви

105

С точки зрения непрофессионала: JDK - дедушка, JRE - отец, а JVM - их сын. [т.е. JDK> JRE> JVM]

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

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

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

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

JVM:

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

JDK и JRE

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

Java Runtime Environment (JRE)

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

Java Development Kit (JDK)

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

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

JIT Compile Process (Предоставлено: документация Oracle)

JDK> JRE> JVM


Когда вы говорите «компилировать» или «компилятор», это очень запутанно в этом контексте, к которому вы обращаетесь: превращение исходного кода Java в байтовый код Java или превращение байтового кода Java в машинный код.
OrangeSherbet

Ницца! Мне нравится аналогия деда, отца и сына. : D
Эмзор

Да, спасибо, очень легко понять, кто не очень знаком с этими терминами.
Джаймин Патель

25

С официального сайта Java ...

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

  • Это реализация виртуальной машины Java *, которая фактически выполняет программы Java.
  • Java Runtime Environment - это плагин, необходимый для запуска Java-программ.
  • JRE меньше, чем JDK, поэтому ему требуется меньше дискового пространства.
  • JRE можно загрузить / поддерживать бесплатно с https://www.java.com
  • Он включает в себя JVM, библиотеки Core и другие дополнительные компоненты для запуска приложений и апплетов, написанных на Java.

JDK (Java Development Kit)

  • Это пакет программного обеспечения, который вы можете использовать для разработки приложений на основе Java.
  • Java Development Kit необходим для разработки Java-приложений.
  • JDK требуется больше дискового пространства, поскольку он содержит JRE вместе с различными инструментами разработки.
  • JDK можно бесплатно скачать / поддерживать с https://www.oracle.com/technetwork/java/javase/downloads/
  • Он включает в себя JRE, набор классов API, компилятор Java, Webstart и дополнительные файлы, необходимые для написания апплетов и приложений Java.

23

Одно отличие с точки зрения отладки:

Для отладки в системных классах Java, таких как String и ArrayList, вам нужна специальная версия JRE, которая компилируется с «информацией отладки». JRE, включенная в JDK, предоставляет эту информацию, а обычная JRE - нет. Обычная JRE не включает эту информацию, чтобы обеспечить лучшую производительность.

Что такое отладочная информация? Вот краткое объяснение, взятое из этого поста в блоге :

Современные компиляторы делают довольно хорошую работу по преобразованию вашего высокоуровневого кода с его хорошо врезанными и вложенными управляющими структурами и произвольно типизированными переменными в большую кучу битов, называемых машинным кодом (или байт-кодом в случае Java), единственной целью которого является работать как можно быстрее на целевом процессоре (виртуальном процессоре вашей JVM). Java-код преобразуется в несколько инструкций машинного кода. Переменные помещаются повсюду - в стек, в регистры или полностью оптимизируются. Структуры и объекты даже не существуют в результирующем коде - они просто абстракция, которая преобразуется в жестко закодированные смещения в буферы памяти.

Так как же отладчик узнает, где остановиться, когда вы просите его прерваться при входе в какую-либо функцию? Как ему удается найти, что показывать, когда вы спрашиваете его о значении переменной? Ответ - отладочная информация.

Отладочная информация генерируется компилятором вместе с машинным кодом. Это представление о связи между исполняемой программой и исходным кодом. Эта информация кодируется в заранее определенный формат и сохраняется вместе с машинным кодом. Многие такие форматы были изобретены за многие годы для разных платформ и исполняемых файлов.


9

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

JVM - это подсистема JDK и JRE, которая используется для проверки промежуточного кода, известного как «байт-код». Сначала он загружает «файл класса» (с расширением .c), сгенерированный компилятором Java (javac) через загрузчик классов подсистемы JVM и классифицированную ячейку памяти (регистры области классов, стека, кучи и компьютера) в соответствии с их использованием. Затем он проверяет весь байт-код, чтобы убедиться, что он возвращается в Java, и доступ к памяти для всей сети. После этого начинается работа переводчика, где строка за строкой проверяется вся программа. Наконец, результаты отображаются в консоли / браузере / приложении через JRE (Java Runtime Environment), которая предоставляет средства выполнения.

JRE также является подсистемой JDK, которая предоставляет средства выполнения, такие как JVM, классы, исполняемые файлы, такие как .jar, и т. Д.

JDK расшифровывается как Java Development Kit. Он содержит все необходимые компоненты, используемые в Java-программировании, такие как класс, метод, свинг, AWT, пакет, Java (интерпретатор), javac (компилятор), appletviewer (просмотрщик приложений апплета) и т. Д. В заключение, он содержит каждый файл, необходимый для разработки приложения, будь то автономные или веб-приложения.


8

JRE

JRE - это аббревиатура от Java Runtime Environment. Он используется для предоставления среды выполнения. Это реализация JVM. Он существует физически. Он содержит набор библиотек + другие файлы, которые JVM использует во время выполнения.

JDK

JDK является аббревиатурой для Java Development Kit. Он существует физически. Он содержит инструменты разработки JRE +.

Ссылка: - http://www.javatpoint.com/difference-between-jdk-jre-and-jvm

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


8

JVM, JRE и JDK зависят от платформы, потому что конфигурация каждой ОС отличается. Но Java не зависит от платформы.

Виртуальная машина Java (JVM) - это система времени выполнения, которая выполняет байт-код Java.

JRE - это среда (стандартные библиотеки и JVM), необходимая для запуска приложений Java.

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


7

Вот простой ответ прямо из Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/

Java SE Runtime Environment (JRE)

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

Java SE Development Kit (JDK)

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


7

Если вы хотите запускать программы Java, но не разрабатывать их, загрузите среду выполнения Java или JRE. Если вы хотите их разработать, загрузите Java Development Kit или JDK

JDK

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

JDK предоставляется как среда разработки для создания приложений, компонентов и апплетов.

JRE

Он содержит все необходимое для запуска приложений Java в скомпилированном виде. Вам не нужно никаких библиотек и прочего. Все, что вам нужно, скомпилировано.

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


6

JVM (виртуальная машина Java) - это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может быть выполнен байт-код Java.

JRE является аббревиатурой для Java Runtime Environment. Он используется для предоставления среды выполнения. Это реализация JVM. Он существует физически. Он содержит набор библиотек + другие файлы, которые JVM использует во время выполнения.

JDK - это аббревиатура для Java Development Kit. Он существует физически. Он содержит инструменты разработки JRE +.


6

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

JVM

JVM (виртуальная машина Java) - это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может быть выполнен байт-код Java.

JVM доступны для многих аппаратных и программных платформ. JVM, JRE и JDK зависят от платформы, потому что конфигурация каждой ОС отличается. Но Java не зависит от платформы.

JRE

Он содержит все необходимое для запуска приложений Java в скомпилированном виде. Вам не нужно никаких библиотек и прочего. Все, что вам нужно, скомпилировано.

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

Java SE Development Kit (JDK)

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

(Источники: GeeksForGeeks Q & A , Обзор платформы Java )


Был плагиат с нескольких сайтов (для разделов JVM и JDK). В следующий раз, пожалуйста, приведите свои источники - это не ваша оригинальная работа.
Джонатан Лам

6

Четкое понимание этих терминов (JVM, JDK, JRE) необходимо для понимания их использования и различий.

JVM Java Virtual Machine (JVM) - это система времени выполнения, которая выполняет байт-код Java. JVM похожа на виртуальный компьютер, который может выполнять набор скомпилированных инструкций и манипулировать областями памяти. Когда компилятор Java компилирует исходный код, он генерирует высокооптимизированный набор инструкций, называемый байт-кодом, в файле .class. JVM интерпретирует эти инструкции байт-кода и преобразует их в машинный код для выполнения.

JDK Java Development Kit (JDK) - это среда разработки программного обеспечения, которую вы можете использовать для разработки и выполнения приложений Java. Он включает в себя JRE и набор инструментов программирования, таких как Java-компилятор, интерпретатор, appletviewer и просмотрщик документов. JDK реализуется через платформы Java SE, Java EE или Java ME.

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

Для полного понимания вы можете увидеть мой блог: JDK JRE JVM и различия


5

JDK необходим для компиляции кода и преобразования Java-кода в байтовые коды, в то время как JRE необходим для выполнения байтовых кодов.


5
@Noy: Мало того, что это очень мало информации, она также не содержит ничего, чего нет в других ответах.
Амос М. Карпентер

5

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

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

JDK - это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может быть выполнен байт-код Java.

Итак, в основном JVM <JRE <JDK, как сказал @Jaimin Patel.


5

Просто:

JVM - это виртуальная машина, на которой выполняется Java-код

JRE - это среда (стандартные библиотеки и JVM), необходимая для запуска приложений Java

JDK - это JRE с инструментами разработчика и документацией


4

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


4

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

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

JRE выполняет приложение, но JVM читает инструкции построчно, так что это интерпретатор.

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

JRE = JVM + Библиотечные классы


2

JRE

JRE является аббревиатурой для Java Runtime Environment. Он используется для предоставления среды выполнения. Это реализация JVM. Это физически существует. Он содержит набор библиотек + другие файлы, которые JVM использует во время выполнения.

Внедрение JVM также активно выпускается другими компаниями, помимо Sun Micro Systems.

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

JDK

JDK является аббревиатурой для Java Development Kit. Он существует физически. Он содержит инструменты разработки JRE +.

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


И информация в тексте, и графика были предоставлены в других, более ранних ответах.
Карл Рихтер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.