Java Virtual Machine (JVM), Differenza JDK, JRE & JVM – Core Java
Java è un linguaggio di programmazione di alto livello. Un programma scritto in un linguaggio di alto livello non può essere eseguito direttamente su qualsiasi macchina. Innanzitutto, deve essere tradotto in quel particolare linguaggio macchina. Il compilatore javac fa questa cosa, ci vuole il programma java (.file java contenente il codice sorgente) e lo traduce in codice macchina (indicato come codice byte o .file di classe).,
Java Virtual Machine (JVM) è una macchina virtuale che risiede nella macchina reale (il computer) e il linguaggio macchina per JVM è il codice byte. Questo rende più facile per il compilatore in quanto deve generare codice byte per JVM piuttosto che codice macchina diverso per ogni tipo di macchina. JVM esegue il codice byte generato dal compilatore e produce output. JVM è quello che rende indipendente la piattaforma java.
Quindi, ora abbiamo capito che la funzione primaria di JVM è quella di eseguire il codice byte prodotto dal compilatore., Ogni sistema operativo ha JVM diverso, tuttavia l’output che producono dopo l’esecuzione del codice di byte è lo stesso in tutti i sistemi operativi. Il che significa che il codice byte generato su Windows può essere eseguito su Mac OS e viceversa. Questo è il motivo per cui chiamiamo java come linguaggio indipendente dalla piattaforma. La stessa cosa si può vedere nel diagramma qui sotto:
Quindi per riassumere tutto: La Java Virtual machine (JVM) è la macchina virtuale che gira sulla macchina reale (il tuo computer) ed esegue il codice di byte Java., La JVM non capisce il codice sorgente Java, ecco perché abbiamo bisogno di avere un compilatore javac che compila *.file java da ottenere *.file di classe che contengono i codici di byte compresi dalla JVM. JVM rende java portatile (scrivi una volta, esegui ovunque). Ogni sistema operativo ha JVM diverso, tuttavia l’output che producono dopo l’esecuzione del codice di byte è lo stesso in tutti i sistemi operativi.
Architettura JVM
Vediamo come funziona JVM:
Class Loader: Il class loader legge il .,file di classe e salvare il codice byte nell’area del metodo.
Area del metodo: c’è solo un’area del metodo in una JVM che è condivisa tra tutte le classi. Questo contiene le informazioni a livello di classe di ciascuno .file di classe.
Heap: Heap è una parte della memoria JVM in cui vengono allocati gli oggetti. JVM crea un oggetto di classe per ogni .file di classe.
Stack: Stack è anche una parte della memoria JVM, ma a differenza di Heap, viene utilizzato per la memorizzazione di variabili temporanee.
Registri PC: questo tiene traccia di quale istruzione è stata eseguita e quale verrà eseguita., Poiché le istruzioni vengono eseguite dai thread, ogni thread ha un registro PC separato.
Stack di metodi nativi: un metodo nativo può accedere alle aree dati di runtime della macchina virtuale.
Interfaccia del metodo nativo: consente al codice java di chiamare o essere chiamato dalle applicazioni native. Le applicazioni native sono programmi specifici per l’hardware e il sistema operativo di un sistema.
Garbage collection: un’istanza di classe viene creata esplicitamente dal codice java e dopo l’uso viene automaticamente distrutta dalla garbage collection per la gestione della memoria.,
JVM Vs JRE Vs JDK
JRE: JRE è l’ambiente in cui viene eseguita la macchina virtuale java. JRE contiene Java Virtual Machine (JVM), librerie di classi e altri file esclusi gli strumenti di sviluppo come compilatore e debugger.
Il che significa che puoi eseguire il codice in JRE ma non puoi sviluppare e compilare il codice in JRE.
JVM: Come abbiamo discusso sopra, JVM esegue il programma utilizzando classe, librerie e file forniti da JRE.,
JDK: JDK è un superset di JRE, contiene tutto ciò che JRE ha insieme a strumenti di sviluppo come compilatore, debugger ecc.