Jaka jest różnica między JVM, JDK, JRE i OpenJDK?

Odpowiedzi:

375

JVM

Java Virtual Machine (JVM) to maszyna wirtualna, która uruchamia Kod bajtowy Javy. JVM nie rozumie kodu źródłowego Java; dlatego musisz skompilować swoje *.javapliki, aby uzyskać *.classpliki zawierające kody bajtowe rozumiane przez JVM. Jest to także jednostka, która pozwala Javie być „przenośnym językiem” ( pisz raz, uruchamiaj gdziekolwiek ). Rzeczywiście istnieją specyficzne implementacje JVM dla różnych systemów (Windows, Linux, macOS, zobacz listę Wikipedii ), celem jest to, że przy tych samych kodach bajtowych wszystkie dają takie same wyniki.

JDK i JRE

Aby wyjaśnić różnicę między JDK a JRE, najlepiej jest przeczytać dokumentację Oracle i zapoznać się ze schematem:

Java Runtime Environment (JRE)

Środowisko wykonawcze Java (JRE) zapewnia biblioteki, wirtualną maszynę Java i inne komponenty do uruchamiania apletów i aplikacji napisanych w języku programowania Java. Ponadto dwie kluczowe technologie wdrażania są częścią JRE: wtyczka Java, która umożliwia uruchamianie apletów w popularnych przeglądarkach; oraz Java Web Start, który wdraża samodzielne aplikacje w sieci. Jest także podstawą technologii Java 2 Platform, Enterprise Edition (J2EE) do opracowywania i wdrażania oprogramowania dla przedsiębiorstw. Środowisko JRE nie zawiera narzędzi i narzędzi, takich jak kompilatory lub debugery do tworzenia apletów i aplikacji.

Java Development Kit (JDK)

JDK jest nadzbiorem środowiska JRE i zawiera wszystko, co znajduje się w środowisku JRE, a także narzędzia, takie jak kompilatory i debuggery niezbędne do tworzenia apletów i aplikacji.

Zauważ, że Oracle nie jest jedynym, który dostarcza JDK.

OpenJDK

OpenJDK jest implementacją JDK typu open source i bazą dla Oracle JDK. Prawie nie ma różnicy między Oracle JDK a OpenJDK.

Różnice podano na tym blogu :

P: Jaka jest różnica między kodem źródłowym znalezionym w repozytorium OpenJDK, a kodem używanym do budowania Oracle JDK?

Odp .: Jest bardzo blisko - nasz proces kompilacji dla Oracle JDK wydaje kompilacje na OpenJDK 7, dodając tylko kilka elementów, takich jak kod wdrażania, który obejmuje implementację wtyczki Java i Java WebStart firmy Oracle, a także niektóre trzecie zamknięte źródło komponenty firm, takie jak rasterizer grafiki, niektóre komponenty firm trzecich typu open source, takie jak Rhino, oraz kilka drobiazgów tu i tam, takich jak dodatkowa dokumentacja lub czcionki innych firm. Idąc dalej, naszym zamiarem jest otwarcie źródła wszystkich elementów Oracle JDK oprócz tych, które uważamy za funkcje komercyjne, takie jak JRockit Mission Control (niedostępne jeszcze w Oracle JDK), i zastąpienie obciążonych komponentów stron trzecich alternatywnymi rozwiązaniami typu open source w celu osiągnięcia bliższej parytetu między bazami kodu.

Aktualizacja dla JDK 11 - artykuł Donalda Smitha próbuje jednoznacznie odróżnić różnicę między Oracle JDK a Oracle OpenJDK: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- i później

alain.janinm
źródło
@ alain.janinm, więc czy wybrałbyś OracleJDK lub OpenJDK dla swojego rozwoju?
Pacerier
@Pacerier Jestem przyzwyczajony do używania OracleJDK w pracy, ale nie mam nic przeciwko OpenJDK :) Właściwie nigdy nie natknąłem się na konkretną różnicę, która sprawia, że ​​wybieram między nimi. Jeśli wolisz oprogramowanie typu open source i nie musisz używać licencji zastrzeżonej, wybierz OpenJDK.
alain.janinm,
1
Proszę mi powiedzieć, czy mam rację co do następujących rzeczy: Zasadniczo żadna prawdziwa aplikacja Java nie może być uruchomiona bez środowiska JRE. Czy więc wszystkie pliki do pobrania (może oprócz niektórych egzotycznych rzeczy dla programistów) zawierają zarówno JVM, jak i JRE (jeśli nie superset JDK)?
Mads Skjern
8
@MadsSkjern Tak. Aby uruchomić aplikację Java, potrzebujesz środowiska JRE. Ale gdy pobierzesz aplikację Java, nie jest dostarczana z JRE, oczekuje się, że masz zainstalowaną na swoim komputerze.
alain.janinm
92

JVM to wirtualna maszyna Java - w rzeczywistości działa Java ByteCode.

JRE to Java Runtime Environment - zawiera między innymi JVM i jest tym, czego potrzebujesz, aby uruchomić program Java.

JDK to Java Development Kit - to JRE, ale z javac (który jest potrzebny do kompilacji kodu źródłowego Java) i innymi narzędziami programistycznymi.

OpenJDK jest specyficzną implementacją JDK.

hvgotcodes
źródło
3
Prawdopodobnie dlatego, że nie wspomniałeś other thingso JVM. Czym oni są ? Czy ten artykuł w pełni odpowiada na to pytanie - javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad
OpenJDK zawiera JVM, która jest jedną z implementacji specyfikacji JVM. Oracle JDK zawiera kolejną implementację specyfikacji JVM
AKh
46

JDK (Java Development Kit)

Java Developer Kit zawiera narzędzia potrzebne do programowania programów Java oraz JRE do uruchamiania programów. Narzędzia obejmują kompilator (javac.exe), program uruchamiający aplikacje Java (java.exe), Appletviewer itp.

Kompilator konwertuje kod Java na kod bajtowy. Program uruchamiający aplikacje Java otwiera środowisko JRE, ładuje klasę i wywołuje swoją główną metodę.

Potrzebujesz JDK, jeśli w ogóle chcesz pisać własne programy i je kompilować. Do uruchamiania programów Java wystarczy JRE.

JRE jest przeznaczony do wykonywania plików Java

tj. JRE = JVM + klasy pakietów Java (jak util, matematyka, język, awt, swing itp.) + biblioteki wykonawcze.

JDK jest głównie ukierunkowany na rozwój Java. Tj. Możesz utworzyć plik Java (za pomocą pakietów Java), skompilować plik Java i uruchomić plik Java.

JRE (Java Runtime Environment)

Java Runtime Environment zawiera JVM, biblioteki klas i inne pliki pomocnicze. Nie zawiera żadnych narzędzi programistycznych, takich jak kompilator, debugger itp. W rzeczywistości JVM uruchamia program i korzysta z bibliotek klas oraz innych plików pomocniczych udostępnianych w środowisku JRE. Jeśli chcesz uruchomić dowolny program Java, musisz mieć środowisko JRE zainstalowane w systemie

Java Virtual Machine zapewnia niezależny od platformy sposób wykonywania kodu; Oznacza to, że skompiluj raz na dowolnej maszynie i uruchom ją w dowolnym miejscu (dowolnej maszynie).

JVM (wirtualna maszyna Java)

Jak wszyscy wiemy, kiedy kompilujemy plik Java, wyjście nie jest „exe”, ale jest to plik „.class”. Plik „.class” składa się z kodów bajtów Java, które są zrozumiałe dla JVM. Java Virtual Machine interpretuje kod bajtowy w kod maszynowy w zależności od systemu operacyjnego i kombinacji sprzętu. Odpowiada za wszystkie rzeczy, takie jak wyrzucanie elementów bezużytecznych, sprawdzanie granic tablic itp. JVM zależy od platformy.

JVM nazywa się „wirtualnym”, ponieważ zapewnia interfejs maszyny, który nie zależy od systemu operacyjnego i architektury sprzętowej komputera. Ta niezależność od sprzętu i systemu operacyjnego jest kamieniem węgielnym wartości programów Java napisanych raz w dowolnym momencie.

Istnieją różne implementacje JVM. Mogą się one różnić między sobą wydajnością, niezawodnością, szybkością itp. Te implementacje będą się różnić w tych obszarach, w których specyfikacja Java nie wspomina o implementacji funkcji, np. Jak działa proces czyszczenia pamięci zależy od JVM, specyfikacja Java nie zdefiniuj konkretny sposób, aby to zrobić.

użytkownik25226
źródło
23

Maszyna wirtualna Java (JVM) to maszyna wirtualna Java, które można wykonać kod bajtowy. Jest to komponent do wykonywania kodu platformy oprogramowania Java.

Java Development Kit (JDK) jest produktem Oracle Corporation głównie dla programistów Java. Od czasu wprowadzenia oprogramowania Java jest to najczęściej używany zestaw oprogramowania Java Software Development Kit (SDK).

Java Runtime Environment , jest również określane jako Java Runtime, Runtime Environment

OpenJDK (Open Java Development Kit) to darmowa i otwarta implementacja języka programowania Java. Jest to wynik wysiłków firmy Sun Microsystems rozpoczętych w 2006 roku. Implementacja jest licencjonowana na licencji GNU General Public Licence (GPL) z wyjątkiem linkowania.

nidhin
źródło
Dobra odpowiedź, ale jedno wyjaśnienie. Inne niż Oracle produkują pakiety JDK - na przykład IBM dla AIX i z / OS, HP dla HP-UX itp.
Trent Gray-Donald
16

JVM to wirtualny kod Java wykonywany na maszynie

JRE to środowisko (biblioteki standardowe i JVM) wymagane do uruchamiania aplikacji Java

JDK to środowisko JRE z narzędziami programistycznymi i dokumentacją

OpenJDK jest wersją JDK typu open source, w przeciwieństwie do zwykłego JDK będącego własnością Oracle

Garrett Hall
źródło
15

JDK (Java Development Kit):

  • zawiera narzędzia potrzebne do opracowania programów Java.
  • Potrzebujesz JDK, jeśli w ogóle chcesz pisać własne programy i je kompilować.
  • JDK jest głównie ukierunkowany na rozwój Java.

JRE (Java Runtime Environment)

Java Runtime Environment zawiera JVM, biblioteki klas i inne pliki pomocnicze. JRE jest przeznaczony do wykonywania plików Java.

JVM (wirtualna maszyna Java)

JVM interpretuje kod bajtowy na kod maszynowy w zależności od systemu operacyjnego i kombinacji sprzętu. Jest odpowiedzialny za wszystkie rzeczy, takie jak wyrzucanie elementów bezużytecznych, sprawdzanie granic tablic itp. Java Virtual Machine zapewnia niezależny od platformy sposób wykonywania kodu.

SZEF
źródło
6

JDK - Kompiluje java do ByteCode. Składa się z debuggerów, kompilatorów itp.

javac file.java // Is executed using JDK

JVM - Wykonuje kod bajtu. JVM jest tym, który uniezależnia platformę Java. Ale JVM różni się w zależności od platformy.

JRE - JVM wraz z bibliotekami wykonawczymi Java do wykonywania programów Java.

bharanitharan
źródło
4

Kolejny aspekt, o którym warto wspomnieć:

JDK (zestaw deweloperski Java)

Będziesz go potrzebować do celów programistycznych, jak sugeruje nazwa.

Na przykład: firma produkująca oprogramowanie będzie musiała zainstalować JDK na swoim komputerze, ponieważ będzie musiała opracować nowe oprogramowanie, które obejmuje również kompilację i uruchamianie programów Java.

Możemy więc powiedzieć, że JDK = JRE + JVM.

JRE (środowisko wykonawcze Java)

Jest potrzebny do uruchamiania programów Java. Nie można z nim kompilować programów Java.

Na przykład: zwykły użytkownik komputera, który chce uruchomić niektóre gry online, będzie potrzebował JRE w swoim systemie do uruchamiania programów Java.

JVM (maszyna wirtualna Java)

Jak zapewne wiesz, uruchom kody bajtowe. To uniezależnia platformę Java, ponieważ wykonuje .classplik, który otrzymujesz po skompilowaniu programu Java, niezależnie od tego, czy kompilujesz go w systemie Windows, Mac, czy Linux.

Otwórz JDK

Cóż, jak powiedziałem powyżej. Teraz JDK jest produkowany przez inną firmę, jedną z nich, która jest open source i bezpłatna do publicznego użytku, jest OpenJDK, podczas gdy inne to JRockit JDK lub IBM JDK firmy Oracle Corporation.

Jednak wszystkie mogą wyglądać tak samo dla ogólnego użytkownika.

Wniosek

Jeśli jesteś programistą Java, będziesz potrzebować JDK w swoim systemie, a ten pakiet będzie również zawierał JRE i JVM, ale jeśli jesteś zwykłym użytkownikiem, który lubi grać w gry online, będziesz potrzebować tylko JRE, a ten pakiet nie będzie zawierał JDK. .

Innymi słowy JDK jest dziadkiem, JRE jest ojcem, a JVM jest ich synem.

Mrinal
źródło
9
Twój post jest zły w każdym miejscu. JRE (środowisko wykonawcze) zawiera JVM (maszyna wirtualna) i bibliotekę klas Java. JDK zawiera JRE i kilka narzędzi programistycznych dla programistów. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Odpowiedz na mój komentarz, kiedy go naprawisz, a ja usunę opinię.
nhahtdh
@nhahtdh możemy powiedzieć: jdk jest niezależnym pakietem, można go pobrać, zainstalować osobno. Jre = niektóre klasy + wtyczka java + JVM
Prakash Pandey
3

Java jest językiem i zawiera ścisłą i silnie napisaną składnię, z którą powinieneś być już bardzo dobrze zaznajomiony.

Java 2 Platform, Standard Edition, znana również jako J2SE, odnosiła się do platformy i obejmowała między innymi klasy w pakietach java.lang i java.io. Był to element składowy, na którym zbudowano aplikacje Java.

Wirtualna maszyna Java (JVM) to wirtualna maszyna programowa, która uruchamia skompilowany kod Java. Ponieważ skompilowany kod Java jest jedynie kodem bajtowym, JVM jest odpowiedzialny za skompilowanie tego kodu bajtowego do kodu maszynowego przed jego uruchomieniem. (Jest to często nazywane kompilatorem Just In Time lub kompilatorem JIT.) JVM zajmuje się także zarządzaniem pamięcią, aby kod aplikacji nie musiał.

Java Development Kit, lub JDK, był i pozostaje oprogramowaniem używanym przez programistów Java do tworzenia aplikacji Java. Zawiera kompilator języka Java, generator dokumentacji, narzędzia do pracy z natywnym kodem oraz (zazwyczaj) kod źródłowy Java dla platformy, aby umożliwić debugowanie klas platform.

Środowisko wykonawcze Java (JRE) było i pozostaje oprogramowaniem, które użytkownicy końcowi pobierają w celu uruchamiania skompilowanych aplikacji Java. Zawiera JVM, ale nie zawiera żadnych narzędzi programistycznych zawartych w JDK. JDK zawiera jednak środowisko JRE.

Koray Tugay
źródło
3

JVM: specyfikacja opisująca sposób / zasoby do uruchomienia programu Java. W rzeczywistości wykonuje bajtowy kod i uniezależnia platformę Java. Robi to inaczej dla różnych platform. JVM dla Windows nie może działać jako JVM dla UNIX.

JRE: Wdrożenie JVM. (JVM + biblioteki czasu wykonywania)

JDK: JRE + kompilator Java i inne niezbędne narzędzia do tworzenia programu Java od zera

użytkownik2807418
źródło
2

JVM : w rzeczywistości oznacza to interpreter kodu bajtowego. Zależy od platformy. Na przykład: na platformie Windows precesjajava.exe ” lub „ javaw.exe ” jest procesem jvm.

JDK : to zestaw narzędzi zawierający niezbędne biblioteki i narzędzia do opracowywania i uruchamiania programu / aplikacji Java

JRE : to środowisko wykonywania aplikacji Java.ie, obsługuje tylko zależności środowiska wykonawczego, w tym JVM dla skompilowanego programu. Jeśli chcemy skompilować program Java, potrzebujemy jdk.

Tom Sebastian
źródło
2

JVM: wirtualna maszyna Java. mówi maszynie, co zrobić z kodem Java. Nie można pobrać JVM w obecnej postaci. Jest dostarczany w innym składniku.

JRE: Niektóre inne komponenty, o których mowa powyżej, to JRE. JVM + inne słoiki służą do tworzenia środowiska wykonawczego

JDK: zawiera JRE (który z kolei zawiera JVM). Po otrzymaniu JDK nie musisz instalować JRE i JVM osobno. Zawiera kompilator, który kompiluje twoje pliki .java do plików .class

Jain
źródło
2

JVM

JVM (Java Virtual Machine) to maszyna abstrakcyjna. Jest to specyfikacja zapewniająca środowisko wykonawcze, w którym można wykonać kod bajtowy Java. Maszyny JVM są dostępne dla wielu platform sprzętowych i programowych.

JRE

JRE jest akronimem środowiska Java Runtime Environment, służy do zapewnienia środowiska wykonawczego, jest implementacją JVM, istnieje fizycznie, zawiera zestaw bibliotek i innych plików używanych przez JVM w czasie wykonywania.

JDK

JDK to akronim od Java Development Kit, który istnieje fizycznie i zawiera narzędzia programistyczne JRE +.

Link: - http://www.javatpoint.com/difference-between-jdk-jre-and-jvm

Nikhil Kumar
źródło
1

W podsumowaniu:

  • JRE = JVM + pakiety Java (takie jak util, matematyka, język, awt, swing itp.) + Biblioteki wykonawcze
  • JDK = JRE + Narzędzia programistyczne / debugujące

Jeśli chcesz rozwijać się w Javie, potrzebujesz JDK, ale jeśli chcesz po prostu uruchomić Javę, potrzebujesz JRE.

Hugo Valenza M.
źródło
0

Maszyna wirtualna Java JVM faktycznie wykonuje kod bajtowy Java. Jest to blok wykonawczy na platformie JAVA. Konwertuje kod bajtowy na kod maszynowy.

Środowisko wykonawcze Java JRE zapewnia minimalne wymagania do wykonania aplikacji Java; składa się z wirtualnej maszyny Java (JVM), klas podstawowych i plików pomocniczych.

JDK Java Development Kit, zawiera wszystkie narzędzia do tworzenia aplikacji. Jest tak, jak JRE + JVM

Open JDK to darmowa i otwarta implementacja platformy Java.

Ankur Anandapu
źródło
0

Mówiąc najprościej: - JDK = JRE + Narzędzia programistyczne / debugujące , w których JDK jest naszym kompletnym pakietem do pracy z Javą, od tworzenia kompilacji do uruchomienia. Z drugiej strony JRE to po prostu uruchamianie kodu (Byte Code).

Uwaga: - Niezależnie od tego, czy instalujemy JDK czy JRE, JVM będzie dostarczany w pakiecie z obydwoma pakietami, a JVM jest częścią, w której kompilator JIT konwertuje kod bajtowy na kod specyficzny dla maszyny.

Wystarczy przeczytać artykuł o JDK, JRE, JVM i JIT

AugustRush
źródło
0

JDK : Kompletny pakiet, który musisz napisać i uruchomić kod Java

OpenJDK : Niezależna implementacja JDK dla ulepszenia go

JVM : Konwertuje kod Java na kod bajtowy i podaje specyfikacje, które określają, w jaki sposób kod Java powinien zostać skompilowany, załadowany, zweryfikowany, sprawdzony pod kątem błędów i wykonany.

JRE : Implementacja JVM, za pomocą której niektóre biblioteki Java są używane do uruchamiania programu

Dhirwan
źródło
0

JRE wykonuje aplikację, ale JVM odczytuje instrukcje wiersz po wierszu, więc jest to tłumacz.

JDK = JRE + narzędzia programistyczne

JRE = JVM + klasy bibliotek

KIBOU Hassan
źródło
0

JVM jest w skrócie Java Virtual Machine , JVM jest głównym składnikiem architektury Java. JVM jest napisany w języku programowania C. Kompilator Java tworzy kod bajtowy dla JVM. JVM odczytuje kod bajtu weryfikując kod bajtu i łącząc kod z biblioteką.

JRE jest w skrócie Java Runtime Environment . zapewnia środowisko w czasie wykonywania. To istnieje fizycznie. Zawiera JVM + zestaw bibliotek (jar) + inne pliki.

JDK jest w skrócie Java Development Kit . to jest tworzenie aplikacji Java. A także debugowanie i monitorowanie aplikacji Java. JDK zawiera narzędzia programistyczne JRE + (javac, java)

OpenJDK OpenJDK to otwarta wersja Sun JDK. Oracle JDK to oficjalny JDK firmy Sun.

Poorna Senani Gamage
źródło