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

Ответы:

375

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.

OpenJDK

OpenJDK - это реализация JDK с открытым исходным кодом и основа для Oracle JDK. Практически нет разницы между Oracle JDK и OpenJDK.

Различия изложены в этом блоге :

Вопрос: В чем разница между исходным кодом, найденным в репозитории OpenJDK, и кодом, который вы используете для сборки Oracle JDK?

A: Это очень близко - наш процесс сборки для Oracle JDK выпускает сборку на OpenJDK 7, добавив всего лишь пару частей, таких как код развертывания, который включает реализацию Oracle плагина Java и Java WebStart, а также некоторый третий закрытый исходный код сторонние компоненты, такие как графический растеризатор, некоторые сторонние компоненты с открытым исходным кодом, такие как Rhino, и несколько кусочков, вроде дополнительной документации или сторонних шрифтов. В дальнейшем мы намереваемся открыть все компоненты Oracle JDK с открытым исходным кодом, кроме тех, которые мы рассматриваем как коммерческие функции, такие как JRockit Mission Control (пока недоступно в Oracle JDK), и заменить обремененные сторонние компоненты альтернативами с открытым исходным кодом, чтобы добиться более четного паритета. между базами кода.

Обновление для JDK 11 - статья Дональда Смита, в которой делается попытка устранить разницу между Oracle JDK и Oracle OpenJDK: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- и позже

alain.janinm
источник
@ alain.janinm, так вы бы выбрали OracleJDK или OpenJDK для своей разработки?
Pacerier
@Pacerier Я привык использовать OracleJDK на работе, но ничего не имею против OpenJDK :) На самом деле я никогда не сталкивался с конкретными различиями, которые заставляют меня выбирать между ними. Если вы предпочитаете open source и вам не нужно использовать проприетарную лицензию, тогда переходите на OpenJDK.
alain.janinm
1
Пожалуйста, скажите мне, если я прав по поводу следующего: По сути, никакое реальное приложение Java не может быть запущено без JRE. Таким образом, все загрузки (может быть, за исключением некоторых экзотических вещей для разработчиков) содержат как JVM, так и JRE (если не суперсет JDK)?
Мэдс Скьерн
8
@MadsSkjern Да, вам нужна JRE для запуска Java-приложения. Но когда вы загружаете приложение Java, оно не поставляется с JRE, а ожидает, что оно установлено на вашем компьютере.
alain.janinm
92

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

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

JDK - это Java Development Kit - это JRE, но с добавлением javac (что вам нужно для компиляции исходного кода Java) и других инструментов программирования.

OpenJDK - это конкретная реализация JDK.

hvgotcodes
источник
3
Возможно, потому что вы не упомянули other thingsсодержание в JVM. Кто они такие ? Полностью ли отвечает эта статья на этот вопрос - javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Эрран Морад,
OpenJDK содержит JVM, которая является одной из реализаций спецификации JVM. Oracle JDK содержит еще одну реализацию спецификации JVM
AKh
46

JDK (Java Development Kit)

Java Developer Kit содержит инструменты, необходимые для разработки программ на Java, и JRE для запуска программ. Инструменты включают компилятор (javac.exe), средство запуска приложений Java (java.exe), Appletviewer и т. Д.

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

Вам нужен JDK, если вы вообще хотите писать свои собственные программы и компилировать их. Для запуска Java-программ достаточно JRE.

JRE предназначен для выполнения файлов Java

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

JDK в основном предназначен для разработки Java. Т.е. вы можете создать файл Java (с помощью пакетов Java), скомпилировать файл Java и запустить файл Java.

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

Java Runtime Environment содержит JVM, библиотеки классов и другие вспомогательные файлы. Он не содержит никаких инструментов разработки, таких как компилятор, отладчик и т. Д. На самом деле JVM запускает программу и использует библиотеки классов и другие вспомогательные файлы, предоставленные в JRE. Если вы хотите запустить любую Java-программу, вам необходимо установить JRE в систему

Виртуальная машина Java обеспечивает независимый от платформы способ выполнения кода; Это означает, что один раз скомпилируйте на любой машине и запустите ее где угодно (на любой машине).

JVM (виртуальная машина Java)

Как мы все знаем, когда мы компилируем файл Java, вывод - это не exe, а файл .class. Файл .class состоит из байтовых кодов Java, которые понятны JVM. Виртуальная машина Java интерпретирует байт-код в машинный код в зависимости от базовой операционной системы и комбинации оборудования. Он отвечает за все такие вещи, как сборка мусора, проверка границ массивов и т. Д. JVM зависит от платформы.

JVM называется «виртуальной», поскольку она обеспечивает интерфейс машины, который не зависит от базовой операционной системы и аппаратной архитектуры машины. Эта независимость от аппаратного обеспечения и операционной системы является краеугольным камнем ценности программ Java для однократной записи.

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

user25226
источник
23

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

Kit Java Development (JDK) является продуктом корпорации Oracle , направленный на разработчиках Java. С момента появления Java он был наиболее широко используемым Java Software Development Kit (SDK).

Среда выполнения Java , также упоминаемая как среда выполнения Java, среда выполнения

OpenJDK (Open Java Development Kit) - это бесплатная реализация языка программирования Java с открытым исходным кодом. Это результат усилий Sun Microsystems, начатых в 2006 году. Реализация лицензирована в соответствии с GNU General Public License (GPL) за исключением ссылок.

nidhin
источник
Хороший ответ, но одно уточнение. Другие, кроме Oracle, производят JDK - например, IBM для AIX и z / OS, HP для HP-UX и т. Д.
Трент Грей-Дональд,
16

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

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

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

OpenJDK - это версия JDK с открытым исходным кодом, в отличие от общего JDK, принадлежащего Oracle

Гарретт Холл
источник
15

JDK (Java Development Kit):

  • содержит инструменты, необходимые для разработки программ на Java.
  • Вам нужен JDK, если вы вообще хотите писать свои собственные программы и компилировать их.
  • JDK в основном предназначен для разработки Java.

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

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

JVM (виртуальная машина Java)

JVM интерпретирует байт-код в машинный код в зависимости от базовой операционной системы и комбинации оборудования. Он отвечает за все такие вещи, как сборка мусора, проверка границ массивов и т. Д. Виртуальная машина Java обеспечивает независимый от платформы способ выполнения кода.

БОСС
источник
6

JDK - компилирует Java в ByteCode. Состоит из отладчиков, компиляторов и т. Д.

javac file.java // Is executed using JDK

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

JRE - JVM вместе с библиотеками времени выполнения Java для выполнения программ Java.

bharanitharan
источник
4

Стоит отметить еще один аспект:

JDK (набор разработчика Java)

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

Например: компания-разработчик программного обеспечения установит JDK на свой компьютер, потому что им потребуется разработать новое программное обеспечение, которое также включает компиляцию и запуск Java-программ.

Таким образом, мы можем сказать, что JDK = JRE + JVM.

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

Это необходимо для запуска программ на Java. Вы не можете скомпилировать программы Java с ним.

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

JVM (виртуальная машина Java)

Как вы, наверное, знаете, запустить байт-коды. Это делает платформу Java независимой, поскольку она выполняет .classфайл, который вы получаете после компиляции программы Java, независимо от того, скомпилированы ли вы в Windows, Mac или Linux.

Открыть JDK

Ну, как я уже сказал выше. В настоящее время JDK производится другой компанией, одна из которых с открытым исходным кодом и бесплатна для публичного использования - OpenJDK, а некоторые другие - JRockit JDK корпорации Oracle или IBM JDK.

Однако все они могут выглядеть одинаково для обычного пользователя.

Вывод

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

Другими словами, JDK - это дедушка, JRE - отец, а JVM - их сын.

Mrinal
источник
9
Ваш пост ошибочен повсюду. JRE (среда выполнения) содержит JVM (виртуальную машину) и библиотеку классов Java. JDK содержит JRE и набор инструментов программирования для разработчиков. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Ответьте на мой комментарий, когда вы это исправите, и я уберу понижающее голосование.
nhahtdh
@nhahtdh мы можем сказать: JDK является независимым пакетом, может быть загружен, установлен отдельно. Jre = некоторые классы + плагин Java + JVM
Пракаш Пандей
3

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

Платформа Java 2, Standard Edition, также известная как J2SE, ссылалась на платформу и включала, среди прочего, классы в пакеты java.lang и java.io. Это был строительный блок, на котором были построены Java-приложения.

Виртуальная машина Java, или JVM, - это программная виртуальная машина, на которой выполняется скомпилированный код Java. Поскольку скомпилированный код Java является просто байт-кодом, JVM отвечает за компиляцию этого байт-кода в машинный код перед его выполнением. (Это часто называют компилятором Just In Time или JIT-компилятором.) JVM также заботится об управлении памятью, чтобы код приложения не нуждался в этом.

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

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

Корай Тугай
источник
3

JVM: спецификация, которая описывает способ / ресурсы для запуска Java-программы. Фактически выполняет байт-код и делает платформу Java независимой. При этом он отличается для разных платформ. JVM для Windows не может работать как JVM для UNIX.

JRE: Внедрение JVM. (JVM + библиотеки времени выполнения)

JDK: JRE + Java-компилятор и другие необходимые инструменты для создания Java-программы с нуля

user2807418
источник
2

JVM : это на самом деле означает интерпретатор байт-кода. Это зависит от платформы. Например: на платформе Windows ' java.exe ' или ' javaw.exe прецессия является процессом jvm.

JDK : инструментарий, содержащий необходимые библиотеки и утилиты для разработки и выполнения Java-программ / приложений

JRE : среда выполнения для java application.ie, она поддерживает только зависимости времени выполнения, включая jvm для скомпилированной программы. Если мы хотим скомпилировать Java-программу, нам нужен JDK.

Том Себастьян
источник
2

JVM: виртуальная машина Java. говорит машине, что делать с кодом Java. Вы не можете скачать JVM как есть. Он поставляется в другом компоненте.

JRE: Некоторым другим компонентом, упомянутым выше, является JRE. Это JVM + другие банки для создания среды выполнения

JDK: содержит JRE (которая, в свою очередь, содержит JVM). После получения JDK вам не нужно устанавливать JRE и JVM по отдельности. Он содержит компилятор, который компилирует ваши файлы .java в файлы .class

Jain
источник
2

JVM

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

JRE

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

JDK

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

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

Нихил Кумар
источник
1

В итоге:

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

Если вы хотите развиваться в Java, вам нужен JDK, но если вы просто хотите запустить Java, вам нужен JRE.

Уго Валенца М
источник
0

JVM Java Virtual Machine, фактически выполняет байт-код Java. Это исполнительный блок на платформе JAVA. Он преобразует байт-код в машинный код.

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

JDK Java Development Kit содержит все инструменты для разработки программного обеспечения. Это как JRE + JVM

Open JDK - это бесплатная реализация платформы Java с открытым исходным кодом.

Анкур Анандапу
источник
0

С точки зрения непрофессионала: - JDK = JRE + инструменты разработки / отладки , где JDK - это наш полный пакет для работы с Java, от создания компиляции до ее запуска. С другой стороны, JRE просто выполняет код (байт-код).

Примечание: - Независимо от того, устанавливаем ли мы JDK или JRE, JVM поставляется в комплекте с обоими пакетами, а JVM - это та часть, где JIT-компилятор преобразует байт-код в машинный код.

Просто прочитайте статью о JDK, JRE, JVM и JIT

Август Раш
источник
0

JDK : полный пакет, который вам нужно написать и запустить код Java

OpenJDK : независимая реализация JDK для его улучшения

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

JRE : Реализация JVM, с которой некоторые библиотеки Java используются для запуска программы

dhirwan
источник
0

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

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

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

КИБУ Хасан
источник
0

JVM сокращенно называется виртуальной машиной Java, JVM является основным компонентом архитектуры Java. JVM написана на языке программирования Си. Компилятор Java создает байт-код для JVM. JVM читает байт-код, проверяет байт-код и связывает код с библиотекой.

JRE сокращенно называется Java Runtime Environment . это обеспечивает среду во время выполнения. Это физически существует. Содержит JVM + набор библиотек (jar) + другие файлы.

JDK сокращенно называется Java Development Kit . это разработка Java-приложений. А также отладка и мониторинг Java-приложений. JDK содержит инструменты разработки JRE + (javac, java)

OpenJDK OpenJDK - это версия Sun JDK с открытым исходным кодом. Oracle JDK является официальным JDK от Sun.

Пурна Сенани Гамаж
источник