Qual è la differenza tra JDK e JRE?


926

Qual è la differenza tra JDK e JRE?

Quali sono i loro ruoli e quando dovrei usare l'uno o l'altro?


12
La risposta piacevole e concisa a questa domanda è disponibile all'indirizzo: java.com/en/download/faq/techinfo.xml
Akshay Lokur


5
@kenorb basato su timestamp, la domanda collegata sembra essere un duplicato di questo.
Ungeheuer,

Risposte:


1223

Il JRE è il Java Runtime Environment . È un pacchetto di tutto il necessario per eseguire un programma Java compilato, tra cui la Java Virtual Machine (JVM), la Java Class Library, iljava comando e altre infrastrutture. Tuttavia, non può essere utilizzato per creare nuovi programmi.

Il JDK è il Java Development Kit , l'SDK completo per Java. Ha tutto ciò che JRE ha, ma anche il compilatore ( javac) e gli strumenti (come javadocejdb ). È in grado di creare e compilare programmi.

Di solito, se ti interessa solo eseguire i programmi Java sul computer, installerai solo JRE. È tutto ciò di cui hai bisogno. D'altra parte, se si prevede di eseguire alcune programmazioni Java, è necessario installare JDK.

A volte, anche se non si prevede di eseguire alcuno sviluppo Java su un computer, è comunque necessario installare JDK. Ad esempio, se si sta distribuendo un'applicazione Web con JSP, tecnicamente si eseguono solo programmi Java all'interno del server delle applicazioni. Perché allora avresti bisogno del JDK? Poiché il server delle applicazioni convertirà JSP in servlet Java e dovrà utilizzare JDK per compilare i servlet. Sono sicuro che ci sono altri esempi.


4
Quindi, quando stiamo usando barattoli esterni, li stiamo distribuendo in jre / lib / ext / .. Allora perché ??
i2ijeya,

2
Ci sono alcuni barattoli specificamente intesi come estensioni di Java; quelli possono e devono essere inseriti in lib / ext. Ma mettere qualsiasi vecchio vasetto di applicazione non è quello a cui questa directory è destinata; è un abuso del meccanismo di estensione e potrebbe causare problemi in seguito.
Carl Smotricz,

Ho lavorato sull'API JExcel e ho impostato correttamente il percorso di classe e esiste ancora il problema. Quindi l'ho distribuito nella cartella tlib / ext, che dopo si è svegliata bene ?? Quindi quale sarebbe la ragione ??
i2ijeya,

3
Non ho informazioni per essere completamente sicuro, ma la mia ipotesi sarebbe che o non hai impostato il classpath correttamente, oppure hai impostato il classpath per un classloader diverso da quello che ha finito per usare il tuo codice. Ciò che rende lib / ext diverso dall'estensione classpath è che lib / ext influenzerà qualsiasi app java che utilizza quel particolare JRE - è più infallibile che impostare il classpath.
Carl Smotricz,

Un paio di settimane fa ho riscontrato un errore piuttosto grave che è stato corretto modificando le mie variabili di ambiente JAVA_HOME e Path per fare riferimento a JRE anziché a JDK. In quale caso un'app funzionerebbe usando JRE e fallirebbe con JDK? Immagino che dovrei aprire una nuova domanda. Una nota interessante è che a partire dalla versione 1.6 JRE è incluso con l'installazione di JDK ma scompone allo stesso livello della cartella JDK mentre nella versione 1.5 e precedenti la cartella JRE si trova all'interno di JDK. A proposito: buona risposta!
Jesse Ivy,

143

La risposta sopra (di Pablo) è molto giusta. Queste sono solo informazioni aggiuntive.

Il JRE è, come suggerisce il nome, un ambiente . Fondamentalmente è un mucchio di directory con file relativi a Java, per dire:

  • bin/contiene i programmi eseguibili di Java. Il più importante è java(e anche per Windows javaw), che avvia la JVM. Ci sono anche altre utilità qui, come keytoole policytool.
  • conf/ contiene file di configurazione modificabili dall'utente con cui gli esperti Java possono giocare.
  • lib/ha un gran numero di file di supporto: alcuni .jarfile di configurazione, file di proprietà, caratteri, traduzioni, certificati, ecc., tutti i "ritagli" di Java. Il più importante è modulesun file che contiene i .classfile della libreria standard Java.
  • A un certo livello, la libreria standard Java deve chiamare il codice nativo. A tale scopo, JRE contiene alcuni file .dll(Windows) o .dylib(macOS) o .so(Linux) con bin/o lib/con codice binario nativo specifico del sistema di supporto.

Il JDK è anche un insieme di directory. È un superset di JRE, con alcune aggiunte:

  • bin/è stato ampliato con strumenti di sviluppo. Il più importante è javac; altri includono jar, javadoce jshell.
  • jmods/, che contiene i file JMOD per la libreria standard, è stato aggiunto. Questi file consentono di utilizzare la libreria standard jlink.

1
Questo significa che posso impostare le variabili del mio percorso su JDK e basta?
Brady,

3
@ Brady: Sì, penso di sì. Per me funziona bene, almeno. Come sviluppatore, essenzialmente ignoro JRE. Se ci sono casi speciali in cui si desidera specificamente JRE, non ne sono consapevole.
Carl Smotricz,

JRE può funzionare solo con codice Java compilato, giusto?
SexyBeast,

2
@Cupidvogel, dal momento che non esiste un compilatore in JRE, immagino che potresti dirlo. JRE è lì per eseguire il codice Java (compilato), mentre JDK offre anche gli strumenti per svilupparlo.
Carl Smotricz,

1
Quindi fondamentalmente JDK include un compilatore (come Javac) per compilare il codice, un JRE (sistema run-time) per eseguire il codice compilato e altri strumenti pensati solo per rendere la vita del programmatore nello sviluppo facile, corretto? Quindi AFAIU, solo Javac e JRE sono gli strumenti davvero necessari qui. Perché allora, molte volte, installazioni di software, aggiornamenti insistono sulla presenza di un JDK?
SexyBeast,

131

inserisci qui la descrizione dell'immagine

JDK è un superset di JRE e contiene tutto ciò che è in JRE, oltre a strumenti come compilatori e debugger necessari per lo sviluppo di applet e applicazioni. JRE fornisce le librerie, la Java Virtual Machine (JVM) e altri componenti per eseguire applet e applicazioni scritte nel linguaggio di programmazione Java.


3
Diagramma fantastico! Sono un po 'confuso dal fatto che il comando java sia rappresentato all'esterno di JRE, il che non è corretto. Non capisco perché ci sono file separati per il comando java quando JDK è installato identici almeno per dimensioni. In quale caso un'app funzionerebbe usando JRE e fallirebbe con JDK? L'ho sperimentato di recente e probabilmente dovrebbe tornare indietro per replicarsi e arrivare fino in fondo ...
Jesse Ivy,

104

In parole povere: JDK è il nonno JRE è il padre e JVM è il loro figlio. [ie JDK> JRE> JVM]

JDK = JRE + Strumenti di sviluppo / debug

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

JVM = Sistema caricatore di classe + area dati runtime + Motore di esecuzione.

In altre parole 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 bisogno solo di JRE e questo pacchetto non avrà JDK in esso.

JVM:

La Java Virtual Machine (JVM) è la macchina virtuale che esegue i bytecode Java. JVM non capisce il codice sorgente Java, ecco perché compili i tuoi file * .java per ottenere file * .class che contengono i bytecode comprensibili 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 tutti diano 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)

Il Java Runtime Environment (JRE) fornisce le librerie, la Java Virtual Machine, e altri componenti per eseguire applet ed 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.

Nota che Oracle non è l'unico a fornire JDK.

Processo di compilazione JIT (per gentile concessione: documentazione Oracle)

JDK> JRE> JVM


Quando dici "compila" o "compilatore", è estremamente confuso in questo contesto a cui ti riferisci: trasformare il codice sorgente Java in codice byte Java o trasformare il codice byte Java in codice macchina.
OrangeSherbet,

Bello! Mi piace l'analogia del nonno, del padre e del figlio. : D
Emzor il

Sì, grazie, è molto facile capire chi non ha molta familiarità con questi termini.
Jaimin Patel,

25

Dal sito Web ufficiale di Java ...

JRE (ambiente Java Runtime):

  • È un'implementazione della Java Virtual Machine * che esegue effettivamente i programmi Java.
  • Java Runtime Environment è un plug-in necessario per l'esecuzione di programmi Java.
  • Il JRE è più piccolo del JDK, quindi ha bisogno di meno spazio su disco.
  • JRE può essere scaricato / supportato liberamente da https://www.java.com
  • Include JVM, librerie Core e altri componenti aggiuntivi per eseguire applicazioni e applet scritte in Java.

JDK (Java Development Kit)

  • È un pacchetto di software che è possibile utilizzare per sviluppare applicazioni basate su Java.
  • Java Development Kit è necessario per lo sviluppo di applicazioni Java.
  • Il JDK necessita di più spazio su disco poiché contiene il JRE insieme a vari strumenti di sviluppo.
  • Il JDK può essere scaricato / supportato liberamente da https://www.oracle.com/technetwork/java/javase/downloads/
  • Include JRE, set di classi API, compilatore Java, Webstart e file aggiuntivi necessari per scrivere applet e applicazioni Java.

23

Una differenza dal punto di vista del debug:

Per eseguire il debug in classi di sistema Java come String e ArrayList, è necessaria una versione speciale di JRE compilata con "informazioni di debug". Il JRE incluso nel JDK fornisce queste informazioni, ma il JRE normale no. JRE regolare non include queste informazioni per garantire prestazioni migliori.

Che cosa sono le informazioni di debug? Ecco una breve spiegazione presa da questo post sul blog :

I compilatori moderni fanno un ottimo lavoro convertendo il tuo codice di alto livello, con le sue strutture di controllo nidificate e ben rientrate e le variabili digitate arbitrariamente in un grande mucchio di bit chiamato codice macchina (o bytecode nel caso di Java), il cui unico scopo è per eseguire il più velocemente possibile sulla CPU di destinazione (CPU virtuale della tua JVM). Il codice Java viene convertito in diverse istruzioni del codice macchina. Le variabili vengono spinte ovunque, nello stack, nei registri o completamente ottimizzate. Strutture e oggetti non esistono nemmeno nel codice risultante: sono semplicemente un'astrazione che viene tradotta in offset codificati in buffer di memoria.

Quindi, come fa un debugger a sapere dove fermarsi quando gli chiedi di rompere all'ingresso di una funzione? Come riesce a trovare cosa mostrarti quando gli chiedi il valore di una variabile? La risposta è: informazioni di debug.

Le informazioni di debug vengono generate dal compilatore insieme al codice macchina. È una rappresentazione della relazione tra il programma eseguibile e il codice sorgente originale. Queste informazioni sono codificate in un formato predefinito e memorizzate insieme al codice macchina. Molti di questi formati sono stati inventati nel corso degli anni per diverse piattaforme e file eseguibili.


9

JVM, JRE, JDK - questi sono tutti elementi portanti del linguaggio Java. Ogni componente funziona separatamente. JDK e JRE esistono fisicamente ma JVM è una macchina astratta che significa che non esiste fisicamente.

JVM è il sottosistema di JDK e JRE che viene utilizzato per verificare il codice intermedio noto come "bytecode". Prima carica il "file di classe" (con estensione .c) generato dal compilatore Java (javac) tramite il caricatore di classi del sottosistema JVM e la posizione di memoria classificata (registri di area, stack, heap e pc della classe) in base al loro utilizzo. Quindi controlla tutto il bytecode per assicurarsi che sia restituito in Java e tutti gli accessi all'accessibilità della memoria dalla rete. Il lavoro dell'interprete inizia dopo quello in cui controlla l'intero programma riga per riga. I risultati vengono infine mostrati nella console / browser / applicazione tramite JRE (Java Runtime Environment) quali funzionalità di runtime.

JRE è anche un sottosistema di JDK che fornisce funzionalità di runtime come JVM, classi, file eseguibili come file .jar, ecc.

JDK sta per Java Development Kit. Contiene tutti i componenti necessari utilizzati nella programmazione Java come classe, metodo, swing, AWT, pacchetto, Java (interprete), javac (compilatore), appletviewer (visualizzatore applicazioni applet), ecc. Per concludere, contiene tutti i file necessari per lo sviluppo applicazioni, sia autonome che basate sul web.


8

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

Di solito, quando ti preoccupi solo di eseguire programmi Java sul tuo browser o computer, installerai solo JRE. È tutto ciò di cui hai bisogno. D'altra parte, se hai intenzione di fare un po 'di programmazione Java, avrai anche bisogno di JDK.


8

JVM, JRE e JDK dipendono dalla piattaforma perché la configurazione di ciascun sistema operativo differisce. Ma Java è indipendente dalla piattaforma.

Java Virtual Machine (JVM) è un sistema di runtime che esegue il bytecode Java.

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

JDK include gli strumenti di sviluppo della riga di comando JRE plus come compilatori e debugger necessari o utili per lo sviluppo di applet e applicazioni.


7

Ecco una semplice risposta direttamente da Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/

Java SE Runtime Environment (JRE)

JRE fornisce le librerie, la macchina virtuale Java e altri componenti necessari per eseguire applet e applicazioni scritte nel linguaggio di programmazione Java. Questo ambiente di runtime può essere ridistribuito con le applicazioni per renderle indipendenti.

Java SE Development Kit (JDK)

JDK include gli strumenti di sviluppo della riga di comando JRE plus come compilatori e debugger necessari o utili per lo sviluppo di applet e applicazioni.


7

Se si desidera eseguire programmi Java, ma non svilupparli, scaricare Java Run-time Environment o JRE. Se si desidera svilupparli, scaricare il kit di sviluppo Java o JDK

JDK

Chiamiamo JDK un kit che include le cose necessarie per sviluppare ed eseguire applicazioni java.

JDK viene fornito come ambiente di sviluppo per la creazione di applicazioni, componenti e applet.

JRE

Contiene tutto il necessario per eseguire le applicazioni Java in forma compilata. Non hai bisogno di alcuna libreria e altro materiale. Tutte le cose di cui hai bisogno sono compilate.

JRE non può essere utilizzato per lo sviluppo, utilizzato solo per eseguire le applicazioni.


6

JVM (Java Virtual Machine) è una macchina astratta. È una specifica che fornisce un ambiente di runtime in cui è possibile eseguire il bytecode java.

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 è l'acronimo di Java Development Kit, esiste fisicamente e contiene strumenti di sviluppo JRE +


6

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 .

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. JVM, JRE e JDK dipendono dalla piattaforma perché la configurazione di ciascun sistema operativo differisce. Ma Java è indipendente dalla piattaforma.

JRE

Contiene tutto il necessario per eseguire le applicazioni Java in forma compilata. Non hai bisogno di alcuna libreria e altro materiale. Tutte le cose di cui hai bisogno sono compilate.

JRE non può essere utilizzato per lo sviluppo, utilizzato solo per eseguire le applicazioni.

Java SE Development Kit (JDK)

JDK include gli strumenti di sviluppo della riga di comando JRE plus come compilatori e debugger necessari o utili per lo sviluppo di applet e applicazioni.

(Fonti: domande e risposte GeeksForGeeks , panoramica della piattaforma Java )


C'era plagio da più siti (per le sezioni JVM e JDK). La prossima volta, cita le tue fonti: non è il tuo lavoro originale.
Jonathan Lam,

6

Una chiara comprensione di questi termini (JVM, JDK, JRE) è essenziale per comprenderne l'utilizzo e le differenze.

JVM Java Virtual Machine (JVM) è un sistema di runtime che esegue il bytecode Java. JVM è come un computer virtuale in grado di eseguire una serie di istruzioni compilate e manipolare le posizioni di memoria. Quando un compilatore Java compila il codice sorgente, genera un set altamente ottimizzato di istruzioni chiamato bytecode in un file .class. JVM interpreta queste istruzioni bytecode e le converte in codice specifico della macchina per l'esecuzione.

JDK Java Development Kit (JDK) è un ambiente di sviluppo software che è possibile utilizzare per sviluppare ed eseguire applicazioni Java. Include JRE e un set di strumenti di programmazione, come un compilatore Java, un interprete, un visualizzatore di applet e un visualizzatore di documenti. Il JDK è implementato attraverso le piattaforme Java SE, Java EE o Java ME.

JRE Java Runtime Environment (JRE) fa parte di JDK che include una JVM, classi core e diverse librerie che supportano lo sviluppo di applicazioni. Sebbene JRE sia disponibile come parte di JDK, è anche possibile scaricarlo e utilizzarlo separatamente.

Per una comprensione completa puoi vedere il mio blog: Jdk Jre Jvm e differenze


5

jdk è necessario per compilare in codice e convertire il codice java in codici byte mentre jre è necessario per eseguire i codici byte.


5
@Noy: Non solo sono pochissime informazioni, ma non contengono nulla delle altre risposte.
Amos M. Carpenter,

5

JDK include gli strumenti di sviluppo della riga di comando JRE plus come compilatori e debugger necessari o utili per lo sviluppo di applet e applicazioni.

JRE è fondamentalmente la Java Virtual Machine su cui vengono eseguiti i tuoi programmi Java. Include anche plugin del browser per l'esecuzione dell'applet.

JDK è una macchina astratta. È una specifica che fornisce un ambiente di runtime in cui è possibile eseguire il bytecode java.

Quindi, fondamentalmente JVM <JRE <JDK secondo @Jaimin Patel ha detto.


5

Semplicemente :

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


4

La differenza tra JDK e JRE è che JDK è il kit di sviluppo software per java mentre JRE è il luogo in cui esegui i tuoi programmi.


4

supponiamo che, se sei uno sviluppatore, il tuo ruolo è quello di sviluppare un programma e di eseguirlo. quindi è necessario disporre dell'ambiente per lo sviluppo e l'esecuzione, fornito da JDK.

supponiamo che, se sei un cliente, non devi preoccuparti dello sviluppo, basta un ambiente per eseguire il programma e ottenere solo risultati, fornito da JRE.

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


2

JRE

JRE è l'acronimo di Java Runtime Environment e viene utilizzato per fornire l'ambiente di runtime. È l'implementazione di JVM. Esiste fisicamente. Contiene un set di librerie + altri file che JVM utilizza in fase di esecuzione.

L'implementazione di JVM viene inoltre rilasciata attivamente da altre società oltre a Sun Micro Systems.

inserisci qui la descrizione dell'immagine

JDK

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

inserisci qui la descrizione dell'immagine


Sia le informazioni nel testo che la grafica sono state fornite in altre risposte precedenti.
Karl Richter,
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.