Cos'è il JRE? Introduzione a Java Runtime Environment

Insieme, Java Development Kit (JDK), Java Virtual Machine (JVM) e Java Runtime Environment (JRE) formano una potente tripla di componenti della piattaforma Java per lo sviluppo e l'esecuzione di applicazioni Java. In precedenza ho introdotto JDK e JVM. In questo breve tutorial imparerai a conoscere JRE, che è l'ambiente di runtime per Java.

In pratica, un ambiente runtime è un software progettato per eseguire altri software. Come ambiente di runtime per Java, JRE contiene le librerie di classi Java, il programma di caricamento classi Java e la Java Virtual Machine. In questo sistema:

  • Il programma di caricamento classi è responsabile del corretto caricamento delle classi e del loro collegamento con le librerie di classi Java principali.
  • La JVM è responsabile di garantire che le applicazioni Java dispongano delle risorse necessarie per funzionare e funzionare correttamente nel dispositivo o nell'ambiente cloud.
  • Il JRE è principalmente un contenitore per gli altri componenti ed è responsabile dell'orchestrazione delle loro attività.

Approfondiremo molto il modo in cui questi componenti lavorano insieme nelle sezioni che seguono.

Installazione di JDK, JRE e JVM

Dal punto di vista dell'installazione, ogni volta che scarichi un JDK, includerà un JRE compatibile con la versione e tale JRE includerà una JVM predefinita. È inoltre possibile scaricare JRE separatamente dal JDK e scegliere tra una varietà di JVM. I valori predefiniti funzionano bene per la maggior parte delle implementazioni, specialmente quando inizi con Java.

Cos'è un ambiente di runtime?

Un programma software deve essere eseguito e per farlo ha bisogno di un ambiente in cui eseguire. L'ambiente di runtime carica i file di classe e garantisce l'accesso alla memoria e ad altre risorse di sistema per eseguirli. In passato, la maggior parte del software utilizzava il sistema operativo (OS) come ambiente di runtime. Il programma veniva eseguito su qualsiasi computer su cui si trovava, ma faceva affidamento sulle impostazioni del sistema operativo per l'accesso alle risorse. Le risorse in questo caso sarebbero cose come memoria, file di programma e dipendenze. Il Java Runtime Environment ha cambiato tutto questo, almeno per i programmi Java.

WORA per Java

Quando è stato introdotto per la prima volta, il principio "scrivi una volta, esegui ovunque" di Java era considerato rivoluzionario, ma oggi è stato adottato come norma per la maggior parte dei sistemi software.

Il Java Runtime Environment

Possiamo considerare il software come una serie di livelli che si trovano sopra l'hardware del sistema. Ogni livello fornisce servizi che verranno utilizzati (e richiesti) dai livelli sopra di esso. Java Runtime Environment è un livello software che viene eseguito sul sistema operativo di un computer, fornendo servizi aggiuntivi specifici per Java.

JRE uniforma la diversità dei sistemi operativi, assicurando che i programmi Java possano essere eseguiti praticamente su qualsiasi sistema operativo senza modifiche. Fornisce inoltre servizi a valore aggiunto. La gestione automatica della memoria è uno dei servizi più importanti di JRE, che garantisce che i programmatori non debbano controllare manualmente l'allocazione e la riallocazione della memoria.

In breve, il JRE è una sorta di meta-OS per programmi Java. È un classico esempio di astrazione , che astrae il sistema operativo sottostante in una piattaforma coerente per l'esecuzione di applicazioni Java.

Come funziona JRE con JVM

Una Java Virtual Machine è un sistema software in esecuzione responsabile dell'esecuzione di programmi Java live. JRE è il sistema su disco che prende il codice Java, lo combina con le librerie necessarie e avvia la JVM per eseguirlo.

JRE contiene librerie e software necessari per l'esecuzione dei programmi Java. Ad esempio, il programma di caricamento classi Java fa parte di Java Runtime Environment. Questo importante pezzo di software carica in memoria il codice Java compilato e lo collega alle librerie di classi Java appropriate.

Nella vista a più livelli che ho appena descritto, la JVM è creata da JRE. Dal punto di vista del pacchetto, la JRE contiene la JVM, come mostra la Figura 1.

Matthew Tyson

Installazione e utilizzo di JRE

Anche se c'è un lato concettuale in JRE, nella pratica del mondo reale è solo un software installato su un computer, il cui scopo è eseguire i programmi Java. Come sviluppatore, lavorerai principalmente con JDK e JVM, perché questi sono i componenti della piattaforma che utilizzi per sviluppare ed eseguire i tuoi programmi Java. In qualità di utente dell'applicazione Java, saresti più coinvolto con JRE, che ti consente di eseguire quei programmi.

Nella maggior parte dei casi, il tuo computer verrà fornito con Java installato e JRE sarà incluso con quello. Se hai bisogno di installare o aggiornare manualmente, puoi scaricare la versione corrente di JRE da Oracle.

Versioni JRE

Java Runtime Environment viene aggiornato per ogni nuova versione di Java e i suoi numeri di versione sono allineati con il sistema di controllo delle versioni della piattaforma Java, quindi ad esempio JRE 1.8 esegue Java 8. Mentre hai una varietà di pacchetti JDK tra cui scegliere (come Enterprise Edition o Standard Edition) che non è il caso di JRE. La maggior parte dei computer esegue un JRE sviluppato per Java SE, che è in grado di eseguire qualsiasi applicazione Java indipendentemente da come è stata sviluppata. La maggior parte dei dispositivi mobili viene fornita con un JRE per Java ME, che è preinstallato sul dispositivo mobile e non è disponibile per il download.

Una volta installato JRE, puoi interagire con esso dalla riga di comando inserendo  java -version, che ti dirà quale versione è installata. Sui sistemi POSIX, puoi sempre controllare la posizione di installazione con which java.

Il JRE in devops

JRE non è molto evidente nella fase di sviluppo, dove per lo più esegue i tuoi programmi solo nel sistema operativo o IDE di tua scelta. JRE svolge un ruolo leggermente più importante nel devops e nell'amministrazione dei sistemi perché viene utilizzato per il monitoraggio e la configurazione.

Fondamentalmente, JRE fornisce le "manopole" che usereste per configurare e controllare le caratteristiche di un'applicazione Java. L'utilizzo della memoria è un ottimo esempio, il pane quotidiano dell'amministrazione dei sistemi. Sebbene l'utilizzo della memoria sia sempre importante, è fondamentale nelle configurazioni cloud e devops è una tecnologia basata su cloud. Se stai lavorando in un ambiente devops o sei interessato a ramificarti in devops, è una buona idea capire come funziona la memoria Java e come viene monitorata in JRE.

Devops o sysadmin?

Devops è un nuovo termine, ma descrive qualcosa che è stato vero per decenni, ovvero l'interoperabilità tra sviluppo e operazioni. In questo senso, devops è solo un termine più recente per ciò che veniva chiamato operazioni o amministrazione dei sistemi. Come sysadmin, un aspetto importante di devops è l'amministrazione dei sistemi necessari per eseguire il software. La gestione di JRE fa parte della gestione dei sistemi che eseguono applicazioni Java.

Memoria Java e JRE

La memoria Java è composta da tre componenti: l'heap, lo stack e il metaspace (che in precedenza era chiamato permgen).

  • Metaspace è dove Java mantiene le informazioni immutabili del tuo programma come le definizioni di classe.
  • Lo spazio heap è dove Java mantiene il contenuto variabile.
  • Lo spazio stack è dove Java memorizza l'esecuzione di funzioni e riferimenti a variabili.

Gestione della memoria in Java 8

Fino a Java 8, metaspace era noto come permgen. Oltre ad essere un nome molto più interessante, metaspace è un cambiamento significativo nel modo in cui gli sviluppatori interagiscono con lo spazio di memoria di Java. In precedenza, avresti utilizzato il comando java -XX:MaxPermSizeper monitorare la dimensione dello spazio permgen. Da Java 8 in avanti, Java aumenta automaticamente la dimensione del metaspace per soddisfare i meta-bisogni del programma. Java 8 ha anche introdotto un nuovo flag, MaxMetaspaceSizeche può essere utilizzato per limitare la dimensione del metaspace.

Le altre opzioni di memoria, heap e stack, rimangono le stesse in Java 8.

Configurazione dello spazio heap

Lo spazio heap è la parte più dinamica del sistema di memoria Java. È possibile utilizzare i flag -Xmse -Xmxper indicare a Java quanto è grande avviare l'heap e quanto grande deve essere consentito. Capire come regolare questi flag per esigenze di programmi specifici è un aspetto importante della gestione della memoria in Java. L'ideale è rendere l'heap abbastanza grande da ottenere la raccolta dei rifiuti più efficiente. Cioè, vuoi consentire una quantità di memoria sufficiente per consentire l'esecuzione del programma, ma non vuoi che sia più grande del necessario.

Configurazione dello spazio dello stack

Lo spazio stack è il punto in cui vengono accodate le chiamate di funzione ei riferimenti alle variabili. Lo spazio dello stack è l'origine del secondo errore più noto nella programmazione Java: l'eccezione di overflow dello stack (la prima è l'eccezione del puntatore nullo). L' eccezione di overflow dello stack indica che hai esaurito lo spazio dello stack perché ne è stato riservato troppo. Di solito, si verifica un overflow dello stack quando uno o più metodi si chiamano a vicenda in modo circolare, dedicando così un numero sempre crescente di chiamate di funzione nello stack.

Utilizzare lo -Xssswitch per configurare la dimensione iniziale dello stack. Lo stack cresce quindi dinamicamente in base alle esigenze del programma.

Monitoraggio delle applicazioni Java

Sebbene il monitoraggio dell'applicazione sia una funzione della JVM, JRE fornisce opzioni di configurazione, che sono la linea di base necessaria per il monitoraggio. Sono disponibili numerosi strumenti per il monitoraggio delle applicazioni Java, dai classici (come il comando Unix top) a sofisticate soluzioni di monitoraggio remoto come il monitoraggio dell'infrastruttura Oracle.

Tra queste opzioni ci sono visual profiler come VisualVM che consentono di ispezionare una JVM in esecuzione. Questi strumenti consentono di rintracciare hotspot e perdite di memoria, oltre a monitorare il consumo complessivo di memoria nel sistema.

Conclusione

Java Runtime Environment è il programma su disco che carica le applicazioni Java per l'esecuzione della JVM. Un JRE è incluso per impostazione predefinita quando si scarica il Java Development Kit e ogni JRE include le librerie di classi Java principali, un programma di caricamento classi Java e una Java Virtual Machine. È utile capire come interagiscono JVM, JDK e JRE, soprattutto per lavorare in ambienti cloud e devops. In questi ambienti, JRE assume un ruolo più importante nel monitoraggio e nella configurazione rispetto allo sviluppo di applicazioni Java tradizionali.

Questa storia, "Che cos'è JRE? Introduzione a Java Runtime Environment" è stata originariamente pubblicata da JavaWorld.