JVM (Java Virtual Machine) è una macchina astratta. È una specifica che fornisce un ambiente runtime in cui è possibile eseguire il bytecode Java.
Le JVM sono disponibili per molte piattaforme hardware e software (ovvero la JVM dipende dalla piattaforma).
Cos'è la JVM
È:
- Una specifica dove è specificato il funzionamento di Java Virtual Machine. Ma il fornitore dell'implementazione è indipendente nella scelta dell'algoritmo. La sua implementazione è stata fornita da Oracle e altre società.
- Un'implementazione La sua implementazione è nota come JRE (Java Runtime Environment).
- Istanza di esecuzione Ogni volta che scrivi il comando Java sul prompt dei comandi per eseguire la classe Java, viene creata un'istanza di JVM.
Cosa fa
La JVM esegue la seguente operazione:
- Carica il codice
- Verifica il codice
- Esegue il codice
- Fornisce l'ambiente di runtime
JVM fornisce le definizioni per:
- Zona di memoria
- Formato del file di classe
- Registrati impostato
- Mucchio di rifiuti raccolti
- Segnalazione di errori fatali ecc.
Architettura JVM
Comprendiamo l'architettura interna di JVM. Contiene classloader, area di memoria, motore di esecuzione ecc.
1) Caricatore di classi
Classloader è un sottosistema di JVM utilizzato per caricare file di classi. Ogni volta che eseguiamo il programma Java, viene caricato per primo dal classloader. Ci sono tre classloader integrati in Java.
//Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } }Provalo adesso
Produzione:
sun.misc.Launcher$AppClassLoader@4e0e2f2a null
Questi sono i classloader interni forniti da Java. Se vuoi creare il tuo classloader, devi estendere la classe ClassLoader.
2) Area Classe (Metodo).
L'area Classe (metodo) memorizza strutture per classe come il pool di costanti di runtime, i dati di campi e metodi, il codice per i metodi.
3) Mucchio
È l'area dei dati di runtime in cui vengono allocati gli oggetti.
4) Impilare
Java Stack memorizza i frame. Contiene variabili locali e risultati parziali e svolge un ruolo nell'invocazione e nella restituzione del metodo.
Ogni thread ha uno stack JVM privato, creato contemporaneamente al thread.
Viene creato un nuovo frame ogni volta che viene invocato un metodo. Un frame viene distrutto quando viene completata l'invocazione del metodo.
5) Registro del contatore del programma
Il registro PC (contatore del programma) contiene l'indirizzo dell'istruzione della Java virtual machine attualmente in esecuzione.
6) Stack di metodi nativi
Contiene tutti i metodi nativi utilizzati nell'applicazione.
7) Motore di esecuzione
Contiene:
8) Interfaccia nativa Java
Java Native Interface (JNI) è un framework che fornisce un'interfaccia per comunicare con un'altra applicazione scritta in un altro linguaggio come C, C++, Assembly ecc. Java utilizza il framework JNI per inviare output alla console o interagire con le librerie del sistema operativo.