JVM vs. JRE vs. JDK: qual è la differenza?

L'ingegnere scrive sul muro di fronte ai membri del team

Java è uno dei linguaggi di programmazione più popolari utilizzati oggi negli ambienti di sviluppo. Viene utilizzato principalmente per progetti di sviluppo back-end, sviluppo di giochi e computer desktop e mobile. Continua a leggere e scopri in che modo Java macchine virtuali (JVM), Java tempo di esecuzione (JRE) e Java Development Kit (JDK) svolgono ciascuno un ruolo nel processo di sviluppo di Java. Conoscerà anche il loro rapporto reciproco e le differenze che li contraddistinguono.

Le ultime notizie nel campo della tecnologia, supportate dalle analisi degli esperti

Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e altro con la newsletter Think. Leggi l'Informativa sulla privacy IBM.

Grazie per aver effettuato l'iscrizione!

L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.

Cos'è la macchina virtuale Java (JVM)?

La macchina virtuale Java, o JVM, carica, verifica ed esegue il bytecode Java. È nota come interprete o nucleo del linguaggio di programmazione Java perché esegue la programmazione Java.

Il ruolo di JVM in Java

JVM è responsabile della conversione del bytecode in codice specifico del computer ed è necessario sia in JDK che in JRE. Dipende inoltre dalla piattaforma e svolge numerose funzioni, tra cui la gestione della memoria e la sicurezza. Inoltre, JVM può eseguire programmi scritti in altri linguaggi di programmazione che sono stati convertiti in bytecode Java.

Java Native Interface (JNI) è spesso indicata in connessione con JVM. JNI è un framework di programmazione che consente al codice Java in esecuzione in JVM di comunicare con (ovvero, chiamare ed essere chiamato da) le applicazioni associate a un componente hardware e a una piattaforma specifica del sistema operativo. Queste applicazioni sono denominate applicazioni native e spesso possono essere scritte in altri linguaggi. I metodi nativi vengono utilizzati per spostare il codice nativo scritto in altre lingue in un'applicazione Java.

Componenti JVM

La JVM è costituita da tre componenti o sottosistemi principali:

  • Il sottosistema Class Loader è responsabile del caricamento, del collegamento e dell'inizializzazione di un file di classe Java (ovvero “Java file”), altrimenti noto come caricamento dinamico delle classi.
  • Le aree dati di tempo di esecuzione contengono aree di metodo, registri PC, aree di pila e thread.
  • Execution Engine contiene un interprete, un compilatore e un'area di garbage collection.
Sviluppo di applicazioni

Sali a bordo: sviluppo di applicazioni Enterprise nel cloud

In questo video il Dr. Peter Haumer illustra l'aspetto del moderno sviluppo di applicazioni aziendali nell'hybrid cloud, mostrando diversi componenti e pratiche, tra cui IBM Z Open Editor, IBM Wazi e Zowe. 

Cos'è il Java Runtime Environment (JRE)?

Java Runtime Environment, o JRE, è un insieme di strumenti software responsabili dell'esecuzione del tempo di esecuzione Java sul suo sistema.

JRE utilizza lo spazio dell'heap per l'allocazione dinamica della memoria per gli oggetti Java. JRE viene utilizzato anche in JDB (Java Debugging).

Il ruolo di JRE in Java

Se un programmatore desidera eseguire un programma Java utilizzando il comando Java, deve installare JRE. Se si tratta solo di installazione (e non di sviluppo o compilazione di codice), è necessario solo JRE.

Componenti JRE

Oltre alla macchina virtuale Java, JRE è composto da vari altri strumenti software di supporto e caratteristiche per ottenere il massimo dalle sue applicazioni.

  • Soluzioni di implementazione: nell'installazione di JRE sono incluse tecnologie di distribuzione come Java Web Start e il plug-in Java che semplificano l'attivazione delle applicazioni e forniscono un supporto avanzato per i futuri aggiornamenti di Java.
  • Toolkit di sviluppo: JRE contiene anche strumenti di sviluppo progettati per aiutare gli sviluppatori a migliorare la loro interfaccia utente. Alcuni di questi toolkit includono quanto segue:
    • Java 2D: un'application programming interface (API) utilizzata per disegnare grafica bidimensionale in linguaggio Java. Gli sviluppatori possono creare interfacce utente avanzate, effetti speciali, giochi e animazioni.
    • Abstract Window Toolkit (AWT): un'interfaccia utente grafica (GUI) utilizzata per creare oggetti, pulsanti, barre di scorrimento e finestre.
    • Swing: un'altra GUI leggera che utilizza un ricco set di widget per offrire personalizzazioni flessibili e facili da usare.
  • Librerie di integrazione: Java Runtime Environment fornisce diverse librerie di integrazione e librerie di classi per aiutare gli sviluppatori a creare connessioni dati senza interruzioni tra le loro applicazioni e servizi. Alcune di queste librerie includono quanto segue:
    • Java IDL: utilizza Common Object Request Brokerage Architecture (CORBA) per supportare oggetti distribuiti scritti nel linguaggio di programmazione Java.
    • API Java Database Connectivity (JDBC): fornisce agli sviluppatori strumenti per scrivere applicazioni con accesso a database di relazioni remote, file flat e fogli di calcolo.
    • Java Naming and Directory Interface (JNDI): un'interfaccia di programmazione e un servizio di directory che consente ai clienti di creare applicazioni portatili in grado di recuperare informazioni dai database utilizzando convenzioni di denominazione.
  • Lingua e librerie di Utility: in JRE sono inclusi Java.lang. e Java.util. pacchetti fondamentali per la progettazione di applicazioni Java, il controllo delle versioni, la gestione e il monitoraggio dei pacchetti. Alcuni di questi pacchetti includono quanto segue
    • Framework: un'architettura unificata composta da una raccolta di interfacce progettate per migliorare lo storage e il processo dei dati delle applicazioni.
    • Concurrency Utilities: un potente pacchetto framework con utilità di threading ad alte prestazioni.
    • API delle preferenze: un'API persistente leggera e multipiattaforma che consente a più utenti sulla stessa macchina di definire il proprio gruppo di preferenze di applicazione.
    • Registrazione: produce report di registro, come errori di sicurezza, errori di configurazione e problemi di prestazioni, per ulteriori analisi.
    • Java Archive (JAR): un formato di file indipendente dalla piattaforma che consente di raggruppare più file in formato JAR, migliorando significativamente la velocità di download e riducendo le dimensioni del file.

Cos'è Java Development Kit (JDK)?

Java Development Kit, o JDK, è un kit di sviluppo software che rappresenta un superset di JRE. È il componente fondamentale che consente lo sviluppo di applicazioni Java e applet Java. È specifico della piattaforma, quindi sono necessari programmi di installazione separati per ogni sistema operativo (ad esempio, Mac, Unix e Windows).

Il ruolo di JDK in Java

JDK contiene tutti gli strumenti necessari per compilare, eseguire il debug ed eseguire un programma sviluppato utilizzando la piattaforma Java. (Vale la pena notare che i programmi Java possono essere eseguiti anche utilizzando la riga di comando.)

Componenti JDK

JDK include tutti gli strumenti, gli eseguibili e i file binari Java necessari per eseguire i programmi Java. Ciò include JRE, un compilatore, un debugger, un archiviatore e altri strumenti utilizzati nello sviluppo Java.

Java SE vs. Java EE

Java è sinonimo di Java Standard Edition (Java SE) o Core Java. Tutti e tre gli eufemismi si riferiscono alla specifica Java di base che include l'atto di definire tipi e oggetti. Java EE, d'altra parte, fornisce API e viene in genere utilizzato per eseguire applicazioni più grandi. Il contenuto di questo blog è incentrato su Java SE.

Collaborazione tra JVM, JRE e JDK

Diamo prima un'occhiata a come i tre componenti principali di Java lavorano insieme, e poi possiamo esaminare le differenze. Il diagramma seguente fornisce un'immagine di come JVM, JRE e JDK si integrano nel landscape Java.

Se immagini una palla da baseball aperta, contiene tre componenti principali: il nucleo rotondo imbottito, la parte centrale in lana e cotone e l'esterno in pelle bovina. Una palla senza tutti e tre questi strati non svolgerà la funzione prevista. Proprio come le tre parti fondamentali di una palla da baseball, JVM, JRE e JDK hanno tutte funzioni specifiche. Senza tutti e tre, Java non funzionerà correttamente.

Confronto tra JVM, JRE e JDK

Nel seguente video, Jamil Spain spiega ulteriormente come JRE e JDK si relazionano:

JDK vs. JRE vs. JVM: differenze chiave

E ora, per le differenze:

  • JDK è la piattaforma di sviluppo, mentre JRE è per l'esecuzione.
  • JVM è la base o il cuore del linguaggio di programmazione Java e garantisce che il codice sorgente Java del programma sia indipendente dalla piattaforma.
  • JVM è incluso sia in JDK che in JRE: i programmi Java non possono essere eseguiti senza di esso.

Tecnologie complementari

Esistono molte tecnologie complementari che possono essere utilizzate per migliorare JVM, JRE o JDK. Le seguenti tecnologie sono tra le più utilizzate:

  • Il compilatore just-in-time (JIT) fa parte di JVM e ottimizza la conversione del bytecode in codice macchina. Seleziona bytecode simili da compilare contemporaneamente, riducendo la durata complessiva del bytecode alla compilazione del codice macchina.
  • Javac, un altro strumento complementare, è un compilatore che legge le definizioni Java e le converte in bytecode che può essere eseguito su JVM.
  • Javadoc converte la documentazione API dal codice sorgente Java in HTML. Ciò è utile quando si crea documentazione standard in HTML.

Tecnologia JVM e container

La macchina virtuale Java (JVM) viene utilizzata per creare, come puoi pensare, macchine virtuali (VM). Le VM sono server che consentono l'esecuzione di più applicazioni sullo stesso hardware fisico sottostante senza influire l'una sull'altra. Ciò consente un migliore utilizzo delle risorse e rende la scalabilità molto più semplice ed economica rispetto all'infrastruttura tradizionale. Le VM sono inoltre facilmente eliminabili grazie alla loro indipendenza. Quando l'applicazione non è più necessaria, è sufficiente disattivare la macchina virtuale.

I contenitori portano questa astrazione al livello successivo e virtualizzano il kernel del sistema operativo. L'assenza del sistema operativo rende i contenitori ancora più leggeri, veloci e flessibili delle VM.

Java, JVM, JDK, JDK e IBM®

Per molte Organizzazioni, Java rimane una parte fondamentale dello sviluppo di applicazione e fornisce una solida base per la creazione di soluzioni portatili e Scalabili. Può anche svolgere un ruolo chiave nella modernizzazione delle applicazioni nel percorso verso il cloud .

Fasi successive Esplora OpenJDK e IBM Runtimes for Business, che forniscono un supporto commerciale affidabile ed economico per l'implementazione, il monitoraggio e la gestione delle applicazioni Java.

Soluzioni correlate
IBM Enterprise Application Service for Java

Un servizio single-tenant completamente gestito per lo sviluppo e la distribuzione di applicazioni Java.

Esplora le applicazioni Java
Soluzioni DevOps

Utilizza il software e gli strumenti DevOps per creare, distribuire e gestire app cloud-native su più dispositivi e ambienti.

Esplora le soluzioni DevOps
Enterprise Application Development Services

Lo sviluppo di applicazioni cloud significa programmare una volta, iterare rapidamente e distribuire ovunque.

Servizi per lo sviluppo di applicazioni
Fai il passo successivo

I servizi di consulenza per lo sviluppo delle applicazioni IBM Cloud offrono consulenza esperta e soluzioni innovative per semplificare la tua strategia cloud. Collabora con gli esperti di cloud e sviluppo di IBM per modernizzare, scalare e accelerare le tue applicazioni, ottenendo risultati trasformativi per la tua azienda.

Esplora i servizi per lo sviluppo di applicazioni Inizia a creare gratuitamente con IBM Cloud