Qual è la differenza tra JVM, JDK, JRE e OpenJDK?


Risposte:


375

JVM

La Java Virtual Machine (JVM) è la macchina virtuale che esegue i bytecode Java. JVM non comprende il codice sorgente Java; ecco perché devi compilare i tuoi *.javafile per ottenere *.classfile che contengono i bytecode compresi da JVM. È anche l'entità che consente a Java di essere un "linguaggio portatile" ( scrivere una volta, eseguire ovunque ). In effetti, ci sono implementazioni specifiche della JVM per diversi sistemi (Windows, Linux, macOS, vedi l'elenco di Wikipedia ), lo scopo è che con gli stessi bytecode forniscano tutti gli stessi risultati.

JDK e JRE

Per spiegare la differenza tra JDK e JRE, la cosa migliore è leggere la documentazione Oracle e consultare il diagramma:

Java Runtime Environment (JRE)

Java Runtime Environment (JRE) fornisce le librerie, la Java Virtual Machine e altri componenti per eseguire applet e applicazioni scritte nel linguaggio di programmazione Java. Inoltre, JRE fa parte di due tecnologie di distribuzione chiave: il plug-in Java, che consente l'esecuzione di applet nei browser più diffusi; e Java Web Start, che distribuisce applicazioni autonome su una rete. È anche la base per le tecnologie della piattaforma Java 2, Enterprise Edition (J2EE) per lo sviluppo e la distribuzione di software aziendali. JRE non contiene strumenti e utilità come compilatori o debugger per lo sviluppo di applet e applicazioni.

Java Development Kit (JDK)

JDK è un superset di JRE e contiene tutto ciò che si trova in JRE, oltre a strumenti come compilatori e debugger necessari per lo sviluppo di applet e applicazioni.

Si noti che Oracle non è l'unico a fornire JDK.

OpenJDK

OpenJDK è un'implementazione open source di JDK e la base per Oracle JDK. Non c'è quasi alcuna differenza tra Oracle JDK e OpenJDK.

Le differenze sono indicate in questo blog :

D: Qual è la differenza tra il codice sorgente trovato nel repository OpenJDK e il codice che usi per creare Oracle JDK?

A: È molto vicino: il nostro processo di compilazione per le versioni di Oracle JDK si basa su OpenJDK 7 aggiungendo solo un paio di pezzi, come il codice di distribuzione, che include l'implementazione di Oracle del plug-in Java e Java WebStart, nonché alcuni terzi chiusi componenti di terze parti come un rasterizzatore grafico, alcuni componenti di terze parti open source, come Rhino, e alcuni frammenti qua e là, come documentazione aggiuntiva o caratteri di terze parti. Andando avanti, il nostro intento è quello di open source tutti i pezzi di Oracle JDK ad eccezione di quelli che consideriamo funzionalità commerciali come JRockit Mission Control (non ancora disponibile in Oracle JDK) e sostituire componenti di terze parti gravati con alternative open source per ottenere una parità più stretta tra le basi di codice.

Aggiornamento per JDK 11 - Un articolo di Donald Smith tenta di chiarire la differenza tra Oracle JDK e Oracle OpenJDK: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- e più tardi


@ alain.janinm, quindi sceglieresti OracleJDK o OpenJDK per il tuo sviluppo?
Pacerier,

@Pacerier Sono abituato a usare OracleJDK al lavoro ma non ho nulla contro OpenJDK :) In realtà non mi sono mai imbattuto in una differenza concreta che mi faccia scegliere tra di loro. Se preferisci l'open source e non hai bisogno di usare una licenza proprietaria, scegli OpenJDK.
alain.janinm,

1
Per favore, dimmi se ho ragione su quanto segue: Fondamentalmente nessuna vera applicazione Java può essere eseguita senza JRE. Quindi tutti i download (forse tranne alcune cose esotiche per gli sviluppatori) contengono sia JVM che JRE (se non il superset JDK)?
Mads Skjern l'

8
@MadsSkjern Sì, per eseguire l'app Java è necessario un JRE. Ma quando scarichi un'app Java non viene fornita con JRE, si aspetta che tu ne abbia installata una sul tuo computer.
alain.janinm,

92

JVM è la Java Virtual Machine - attualmente esegue Java ByteCode.

JRE è Java Runtime Environment - contiene tra l'altro una JVM ed è ciò di cui hai bisogno per eseguire un programma Java.

JDK è il Java Development Kit - è il JRE, ma con javac (che è ciò di cui hai bisogno per compilare il codice sorgente Java) e altri strumenti di programmazione aggiunti.

OpenJDK è un'implementazione JDK specifica.


3
Probabilmente perché non hai menzionato il other thingscontenuto di una JVM. Quali sono ? Questo articolo risponde pienamente a questa domanda - javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad

OpenJDK contiene JVM che è una delle implementazioni della specifica JVM. Oracle JDK contiene un'altra implementazione delle specifiche JVM
AK

46

JDK (Java Development Kit)

Java Developer Kit contiene gli strumenti necessari per sviluppare i programmi Java e JRE per eseguire i programmi. Gli strumenti includono compilatore (javac.exe), lanciatore di applicazioni Java (java.exe), Appletviewer, ecc ...

Il compilatore converte il codice java in codice byte. Il programma di avvio dell'applicazione Java apre un JRE, carica la classe e invoca il suo metodo principale.

Hai bisogno di JDK, se vuoi scrivere i tuoi programmi e compilarli. Per l'esecuzione di programmi Java, JRE è sufficiente.

JRE è destinato all'esecuzione di file Java

cioè JRE = JVM + Classi di pacchetti Java (come util, math, lang, awt, swing etc) + librerie di runtime.

JDK è principalmente destinato allo sviluppo di Java. Vale a dire È possibile creare un file Java (con l'aiuto di pacchetti Java), compilare un file Java ed eseguire un file Java.

JRE (Java Runtime Environment)

Java Runtime Environment contiene JVM, librerie di classi e altri file di supporto. Non contiene strumenti di sviluppo come compilatore, debugger, ecc. In realtà JVM esegue il programma e utilizza le librerie di classi e altri file di supporto forniti in JRE. Se si desidera eseguire qualsiasi programma Java, è necessario che JRE sia installato nel sistema

Java Virtual Machine fornisce un modo indipendente dalla piattaforma per eseguire il codice; Ciò significa compilare una volta su qualsiasi macchina ed eseguirlo ovunque (qualsiasi macchina).

JVM (Java Virtual Machine)

Come tutti sappiamo quando compiliamo un file Java, l'output non è un 'exe' ma è un file '.class'. Il file '.class' è costituito da codici byte Java comprensibili da JVM. Java Virtual Machine interpreta il codice byte nel codice macchina in base al sistema operativo e alla combinazione hardware sottostanti. È responsabile di tutte le cose come la garbage collection, il controllo dei limiti dell'array, ecc ... JVM dipende dalla piattaforma.

La JVM è chiamata "virtuale" perché fornisce un'interfaccia macchina che non dipende dal sistema operativo sottostante e dall'architettura hardware della macchina. Questa indipendenza dall'hardware e dal sistema operativo è una pietra angolare del valore write-once run -where dei programmi Java.

Esistono diverse implementazioni JVM. Questi possono differire in cose come prestazioni, affidabilità, velocità, ecc. Queste implementazioni differiranno in quelle aree in cui le specifiche Java non menzionano come implementare le funzionalità, come il modo in cui il processo di garbage collection funziona dipende da JVM, le specifiche Java no definire un modo specifico per farlo.


23

Una macchina virtuale Java (JVM) è una macchina virtuale che può eseguire Java ByteCode. È il componente di esecuzione del codice della piattaforma software Java.

Il Java Development Kit (JDK) è un prodotto Oracle Corporation rivolto agli sviluppatori Java. Dall'introduzione di Java, è stato di gran lunga il Java Software Development Kit (SDK) più utilizzato.

Java Runtime Environment , viene anche definito Java Runtime, Runtime Environment

OpenJDK (Open Java Development Kit) è un'implementazione gratuita e open source del linguaggio di programmazione Java. È il risultato di uno sforzo iniziato da Sun Microsystems nel 2006. L'implementazione è sotto licenza GNU General Public License (GPL) con un'eccezione di collegamento.


Buona risposta, ma un chiarimento. Oltre a Oracle producono JDK - ad esempio IBM per AIX e z / OS, HP per HP-UX, ecc.
Trent Gray-Donald

16

JVM è la macchina virtuale su cui viene eseguito il codice Java

JRE è l'ambiente (librerie standard e JVM) richiesti per eseguire le applicazioni Java

JDK è il JRE con strumenti e documentazione per gli sviluppatori

OpenJDK è una versione open source di JDK, a differenza del comune JDK di proprietà di Oracle


15

JDK (Java Development Kit):

  • contiene gli strumenti necessari per sviluppare i programmi Java.
  • Hai bisogno di JDK, se vuoi scrivere i tuoi programmi e compilarli.
  • JDK è principalmente destinato allo sviluppo di Java.

JRE (Java Runtime Environment)

Java Runtime Environment contiene JVM, librerie di classi e altri file di supporto. JRE è destinato all'esecuzione di file Java.

JVM (Java Virtual Machine)

La JVM interpreta il codice byte nel codice macchina in base alla combinazione di sistema operativo e hardware sottostante. È responsabile di tutte le cose come la garbage collection, il controllo dei limiti dell'array, ecc ... Java Virtual Machine fornisce un modo indipendente di piattaforma per eseguire il codice.


6

JDK - Compila java in ByteCode. È composto da debugger, compilatori ecc.

javac file.java // Is executed using JDK

JVM : esegue il codice byte. JVM è quello che rende indipendente la piattaforma Java. Ma JVM varia per piattaforme.

JRE - JVM insieme alle librerie di runtime java per eseguire programmi java.


4

Un altro aspetto degno di nota:

JDK (kit di sviluppo Java)

Ne avrai bisogno per scopi di sviluppo come suggerisce il nome.

Ad esempio: una società di software avrà JDK installato sul proprio computer perché dovrà sviluppare un nuovo software che prevede anche la compilazione e l'esecuzione dei propri programmi Java.

Quindi possiamo dire che JDK = JRE + JVM.

JRE (ambiente di runtime java)

È necessario per eseguire i programmi Java. Non è possibile compilare programmi Java con esso.

Ad esempio: un normale utente di computer che desidera eseguire alcuni giochi online avrà bisogno di JRE nel suo sistema per eseguire i programmi Java.

JVM (java virtual machine)

Come forse saprai, esegue i bytecode. Rende indipendente la piattaforma Java perché esegue il .classfile ottenuto dopo aver compilato il programma Java indipendentemente dal fatto che sia stato compilato su Windows, Mac o Linux.

Apri JDK

Bene, come ho detto sopra. Ora JDK è prodotto da diverse società, una delle quali open source e gratuita per uso pubblico è OpenJDK, mentre altre sono JRockit JDK di Oracle Corporation o IBM JDK.

Tuttavia, potrebbero apparire tutti uguali per l'utente generico.

Conclusione

Se sei un programmatore Java avrai bisogno di JDK nel tuo sistema e questo pacchetto includerà anche JRE e JVM ma se sei un utente normale a cui piace giocare ai giochi online allora avrai solo bisogno di JRE e questo pacchetto non avrà JDK in esso .

In altre parole, JDK è il nonno JRE è il padre e JVM è il loro figlio.


9
Il tuo post è sbagliato in tutto il luogo. JRE (ambiente di runtime) contiene JVM (macchina virtuale) e Java Class Library. JDK contiene JRE e un sacco di strumenti di programmazione per gli sviluppatori. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Rispondi al mio commento quando lo aggiusti e rimuoverò il downvote.
nhahtdh,

@nhahtdh possiamo dire: jdk è un pacchetto indipendente, può essere scaricato, installato separatamente. Jre = alcune classi + plugin java + JVM
Prakash Pandey,

3

Java è il linguaggio e include una sintassi rigorosa e fortemente tipizzata con cui ormai dovresti avere molta familiarità.

Java 2 Platform, Standard Edition, noto anche come J2SE, si riferiva alla piattaforma e includeva le classi nei pacchetti java.lang e java.io, tra gli altri. Era il blocco su cui sono state costruite le applicazioni Java.

Una Java Virtual Machine, o JVM, è una macchina virtuale software che esegue codice Java compilato. Poiché il codice Java compilato è semplicemente bytecode, la JVM è responsabile della compilazione di quel bytecode in codice macchina prima di eseguirlo. (Questo è spesso chiamato il compilatore Just In Time o il compilatore JIT.) JVM si occupa anche della gestione della memoria in modo che il codice dell'applicazione non debba.

Il Java Development Kit, o JDK, era e rimane il software utilizzato dagli sviluppatori Java per creare applicazioni Java. Contiene un compilatore del linguaggio Java, un generatore di documentazione, strumenti per lavorare con il codice nativo e (in genere) il codice sorgente Java per la piattaforma per abilitare le classi della piattaforma di debug.

Java Runtime Environment, o JRE, era e rimane il pezzo di software scaricato dagli utenti finali per eseguire applicazioni Java compilate. Include una JVM ma non contiene nessuno degli strumenti di sviluppo raggruppati nella JDK. Il JDK, tuttavia, contiene un JRE.


3

JVM: una specifica che descrive il modo / le risorse per eseguire un programma java. Esegue effettivamente il codice byte e rende indipendente la piattaforma Java. In tal modo, è diverso per piattaforma diversa. JVM per Windows non può funzionare come JVM per UNIX.

JRE: implementazione di JVM. (JVM + librerie di runtime)

JDK: compilatore JRE + java e altri strumenti essenziali per creare un programma java da zero


2

JVM : questo significa in realtà l'interprete del codice byte. Dipende dalla piattaforma. Ad esempio: nella piattaforma Windows il processo " java.exe " o " javaw.exe " è il processo jvm.

JDK : è un toolkit contenente le librerie e le utilità necessarie per sviluppare ed eseguire il programma / l'applicazione java

JRE : è l'ambiente di esecuzione di un'applicazione Java.ie, supporta solo dipendenze di runtime incluso jvm per il programma compilato. Se vogliamo compilare un programma Java abbiamo bisogno di jdk.


2

JVM: macchina virtuale di Java. dice alla macchina cosa fare con il codice Java. Non è possibile scaricare JVM così com'è. Viene confezionato in qualche altro componente.

JRE: qualche altro componente indicato sopra è JRE. È JVM + altri barattoli per creare l'ambiente di runtime

JDK: contiene JRE (che a sua volta contiene JVM). Una volta ottenuto JDK non è necessario installare JRE e JVM separatamente. Contiene compilatore che compila i tuoi file .java in file .class


2

JVM

JVM (Java Virtual Machine) è una macchina astratta. È una specifica che fornisce un ambiente di runtime in cui è possibile eseguire il bytecode java. Le JVM sono disponibili per molte piattaforme hardware e software.

JRE

JRE è l'acronimo di Java Runtime Environment, utilizzato per fornire l'ambiente di runtime, è l'implementazione di JVM, esiste fisicamente e contiene un set di librerie + altri file che JVM utilizza in fase di runtime.

JDK

JDK è l'acronimo di Java Development Kit, esiste fisicamente e contiene strumenti di sviluppo JRE +.

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


1

In sintesi:

  • JRE = Pacchetti JVM + Java (come util, math, lang, awt, swing etc) + librerie di runtime
  • JDK = JRE + Strumenti di sviluppo / debug

Se si desidera sviluppare in Java, è necessario JDK, ma se si desidera eseguire solo Java, è necessario JRE.


0

JVM Java Virtual Machine, esegue effettivamente il bytecode java. È il blocco di esecuzione sulla piattaforma JAVA. Converte il bytecode nel codice macchina.

JRE Java Runtime Environment, fornisce i requisiti minimi per l'esecuzione di un'applicazione Java; è costituito da Java Virtual Machine (JVM), classi principali e file di supporto.

JDK Java Development Kit, ha tutti gli strumenti per sviluppare il tuo software applicativo. È come JRE + JVM

Open JDK è un'implementazione gratuita e open source della piattaforma Java.


0

In parole povere: - JDK = JRE + Strumenti di sviluppo / debugging , in cui JDK è il nostro pacchetto completo per lavorare con Java, dalla creazione alla compilazione fino all'esecuzione. D'altra parte, JRE è solo in esecuzione del codice (Codice byte).

Nota: - Sia che stiamo installando JDK o JRE, JVM verrebbe in bundle con entrambi i pacchetti e JVM è la parte in cui il compilatore JIT converte il codice byte nel codice specifico della macchina.

Basta leggere l'articolo su JDK, JRE, JVM e JIT


0

JDK : il pacchetto completo di cui hai bisogno per scrivere ed eseguire il codice java

OpenJDK : un'implementazione indipendente di JDK per renderlo molto migliore

JVM : converte il codice Java in bytecode e fornisce le specifiche che indicano come dovrebbe essere compilato, caricato, verificato, verificato un errore un codice Java ed eseguito.

JRE : implementazione della JVM con cui vengono utilizzate alcune librerie Java per eseguire il programma


0

JRE esegue l'applicazione ma JVM legge le istruzioni riga per riga, quindi è un interprete.

JDK = JRE + Strumenti di sviluppo

JRE = JVM + Classi di libreria


0

JVM è abbreviato come Java Virtual Machine , JVM è il componente principale dell'architettura java. JVM è scritto in linguaggio di programmazione C. Il compilatore Java produce il codice byte per JVM. JVM che legge il codice byte verificando il codice byte e collegando il codice con l'ibrido.

JRE è abbreviato come Java Runtime Environment . è fornire ambiente in fase di esecuzione. Esiste fisicamente. Contiene JVM + set di librerie (jar) + altri file.

JDK è abbreviato come Java Development Kit . è sviluppare applicazioni Java. E anche il debug e il monitoraggio delle applicazioni Java. JDK contiene strumenti di sviluppo JRE + (javac, java)

OpenJDK OpenJDK è una versione open source di sun JDK. Oracle JDK è il JDK ufficiale di Sun.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.