Чим відрізняється JDK від JRE?


925

Чим відрізняється JDK від JRE?

Які їх ролі і коли я повинен використовувати ту чи іншу?


12
Приємну та стислу відповідь на це запитання можна знайти за посиланням: java.com/en/download/faq/techinfo.xml
Akshay Lokur


5
@kenorb на основі часових позначок, пов'язане питання, здається, є дублікатом цього.
Ungeheuer

Відповіді:


1222

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
Є кілька банок, спеціально призначених як розширення Java; їх можна і потрібно помістити в lib / ext. Але ставити будь-які старі банки додатків - це не те, для чого призначений цей каталог; це зловживання механізмом розширення і згодом може спричинити проблеми.
Карл Смотрич

Я працював над API JExcel і правильно встановив класний шлях, і все ще існує проблема. Отже, я розгорнув його всередині папки 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. BTW: Гарна відповідь!
Джессі Айві

143

Відповідь вище (Пабло) дуже правильна. Це лише додаткова інформація.

JRE , як слід з назви, в середу . В основному це купа каталогів з файлами, пов’язаними з Java:

  • bin/містить виконавчі програми Java. Найважливішим є java(і для Windows javawтакож), який запускає JVM. Тут також є деякі інші утиліти, такі як keytoolі policytool.
  • conf/ вміщує файли конфігурації, які можна редагувати користувачеві, для яких експерти з Java можуть грати.
  • lib/має велику кількість підтримуючих файлів: деякі .jars, файли конфігурації, файли властивостей, шрифти, переклади, certs тощо. - всі "обрізки" 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

130

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

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


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

104

Простіше кажучи: JDK - це дід, JRE - батько, а JVM - їх син. [тобто JDK> JRE> JVM]

JDK = JRE + Інструменти розробки / налагодження

JRE = JVM + Класи Java-пакети (наприклад, util, математика, 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 (JRE)

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

Java Development Kit (JDK)

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

Зауважте, що Oracle не єдиний, хто надає JDK.

Процес компіляції JIT (надано: документація 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, такі як клас, метод, swing, 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 плюс, такі як компілятори та налагоджувачі, необхідні або корисні для розробки апплетів та програм.


7

Ось простий відповідь безпосередньо від http://docs.oracle.com/javase/7/docs/technotes/guides/

Середовище виконання Java SE (JRE)

JRE надає бібліотеки, віртуальну машину Java та інші компоненти, необхідні для запуску аплетів та програм, написаних мовою програмування Java. Це середовище виконання можна перерозподілити за допомогою додатків, щоб зробити їх вільними.

Набір для розробки Java SE (JDK)

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


7

Якщо ви хочете запускати програми Java, але не розробляти їх, завантажте середовище виконання програми Java або JRE. Якщо ви хочете їх розробити, завантажте комплект Java Development або JDK

JDK

Скажімо, JDK - це набір, до якого входять ті речі, які потрібні для розробки та запуску програм Java.

JDK дається як середовище розробки для створення програм, компонентів і аплетів.

JRE

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

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


6

JVM (Java Virtual Machine) - це абстрактна машина. Це специфікація, яка забезпечує середовище виконання, в якому може виконуватися байт-код Java.

JRE є абревіатурою для Java Runtime Environment. Він використовується для забезпечення середовища виконання. Це реалізація JVM.Той існує фізично. Він містить набір бібліотек + інші файли, які JVM використовує під час виконання

JDK - це абревіатура для Java Development Kit.Фізично існує. Вона містить інструменти розробки JRE +


6

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

JVM

JVM (Java Virtual Machine) - це абстрактна машина. Це специфікація, яка забезпечує середовище виконання, в якому може виконуватися байт-код Java.

JVM доступні для багатьох апаратних та програмних платформ. JVM, JRE і JDK залежать від платформи, оскільки конфігурація кожної ОС відрізняється. Але, Java не залежить від платформи.

JRE

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

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

Набір для розробки Java SE (JDK)

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

(Джерела: Питання та відповіді GeeksForGeeks , Огляд платформи Java )


Існував плагіат з декількох сайтів (для розділів JVM та JDK). Наступного разу, будь ласка, цитуйте свої джерела - це не ваша оригінальна робота.
Джонатан Лам

6

Чітке розуміння цих термінів (JVM, JDK, JRE) має важливе значення для розуміння їх використання та відмінностей.

Віртуальна машина Java JVM (JVM) - це система, що виконує час роботи, яка виконує байт-код Java. JVM - це як віртуальний комп'ютер, який може виконувати набір складених інструкцій та маніпулювати місцями пам'яті. Коли компілятор Java компілює вихідний код, він генерує високооптимізований набір інструкцій, який називається байт-кодом у файлі .class. JVM інтерпретує ці інструкції байт-коду та перетворює їх у специфічний для виконання код код.

JDK Набір для розробки Java (JDK) - це середовище розробки програмного забезпечення, яке можна використовувати для розробки та виконання програм Java. Вона включає в себе JRE та набір інструментів програмування, таких як компілятор Java, інтерпретатор, аплетпрев'юер і переглядач документів. JDK реалізується через платформи Java SE, Java EE або Java ME.

JRE Середовище виконання Java (JRE) - це частина JDK, яка включає JVM, основні класи та кілька бібліотек, що підтримують розробку додатків. Хоча JRE доступний як частина JDK, ви також можете завантажити та використовувати його окремо.

Для повного розуміння ви можете побачити мій блог: Jdk Jre Jvm та відмінності


5

jdk необхідно компілювати для кодування та перетворення java-коду в байт-коди, тоді як jre необхідний для виконання байтових кодів.


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

5

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

JRE - це віртуальна машина Java, на якій працюють ваші Java програми. Він також включає плагіни браузера для виконання Applet.

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.