В чем разница между JDK и JRE? - PullRequest
799 голосов
/ 15 декабря 2009

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

Ответы [ 20 ]

1064 голосов
/ 15 декабря 2009

JRE - это Java Runtime Environment . Это пакет всего необходимого для запуска скомпилированной 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 для компиляции сервлетов. Я уверен, что есть еще примеры.

124 голосов
/ 15 декабря 2009

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

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

  • bin/ содержит исполняемые программы Java. Наиболее важным является java (и для Windows javaw), который запускает JVM. Здесь также есть некоторые другие утилиты, такие как keytool и policytool.
  • conf/ содержит редактируемые пользователем файлы конфигурации, с которыми могут играть эксперты по Java.
  • lib/ имеет большое количество вспомогательных файлов: некоторые .jar s, файлы конфигурации, файлы свойств, шрифты, переводы, сертификаты и т. Д. - все «обрезки» Java. Наиболее важным является modules, файл, который содержит .class файлы стандартной библиотеки Java.
  • На определенном уровне стандартная библиотека Java должна вызывать нативный код. Для этой цели JRE содержит некоторые файлы .dll (Windows) или .dylib (macOS) или .so (Linux) в bin/ или lib/ с поддерживающим системным двоичным кодом.

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

  • bin/ дополнен инструментами разработки. Самым важным из них является javac; другие включают jar, javadoc и jshell.
  • jmods/, который содержит файлы JMOD для стандартной библиотеки, был добавлен. Эти файлы позволяют использовать стандартную библиотеку с jlink.
117 голосов
/ 20 марта 2015

enter image description here

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

86 голосов
/ 29 декабря 2015

С точки зрения непрофессионала: 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 (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 (Предоставлено документацией Oracle)

image JRE > JVM">

25 голосов
/ 01 апреля 2014

с официального сайта 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 голосов
/ 09 июля 2014

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

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

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

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

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

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

8 голосов
/ 02 сентября 2016

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

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

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

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

8 голосов
/ 21 апреля 2015

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.

7 голосов
/ 12 августа 2016

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, он содержит все необходимые компоненты, которые используются в программировании, такие как класс, методы, swing, AWT, пакет, java (интерпретатор), javac (компилятор), appletviewer (просмотрщик приложений апплета) и т. д. Таким образом, окончательный вывод состоит в том, что он содержит каждый файл, полезный для разработки приложения, независимо от того, является ли оно автономным или веб-ориентированным.

7 голосов
/ 01 ноября 2015

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

JDK

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

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

JRE

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...