logo

Architettura JVM (Java Virtual Machine).

  1. macchina virtuale Java
  2. Architettura interna di JVM

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

È:

  1. 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à.
  2. Un'implementazione La sua implementazione è nota come JRE (Java Runtime Environment).
  3. 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.

Architettura JVM

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.

    Caricatore di classi Bootstrap: Questo è il primo classloader che è la super classe del classloader Extension. Carica il rt.jar file che contiene tutti i file di classe di Java Standard Edition come classi di pacchetto java.lang, classi di pacchetto java.net, classi di pacchetto java.util, classi di pacchetto java.io, classi di pacchetto java.sql ecc.ClassLoader dell'estensione: questo è il classloader figlio di Bootstrap e il classloader genitore del classloader System. Carica i file jar che si trovano all'interno $JAVA_HOME/jre/lib/ext directory.ClassLoader sistema/applicazione: Questo è il classloader figlio del classloader Extension. Carica i file di classe dal classpath. Per impostazione predefinita, il classpath è impostato sulla directory corrente. Puoi modificare il classpath utilizzando l'opzione '-cp' o '-classpath'. È noto anche come caricatore di classi dell'applicazione.
 //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:

    Un processore virtuale Interprete:Leggi il flusso del bytecode quindi esegui le istruzioni.Compilatore Just-In-Time (JIT):Viene utilizzato per migliorare le prestazioni. JIT compila contemporaneamente parti del codice byte che hanno funzionalità simili e quindi riduce la quantità di tempo necessaria per la compilazione. Qui il termine 'compilatore' si riferisce a un traduttore dal set di istruzioni di una Java virtual machine (JVM) al set di istruzioni di una specifica CPU.

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.