Cos'è la JVM? Spiega la JVM Architectura
⚡ Riepilogo intelligente
Java La macchina virtuale (JVM) è il motore che fornisce un ambiente di runtime per guidare Java codice, convertendo il bytecode indipendente dalla piattaforma in linguaggio macchina nativo. Fa parte del Java Ambiente di runtime e abilita JavaLa sua portabilità "scrivi una volta, esegui ovunque".

In cosa consiste la JVM? Java?
Java Macchina virtuale (JVM) è un motore che fornisce un ambiente runtime per gestire Java codice o applicazioni. Converte Java bytecode in linguaggio macchina. JVM fa parte di Java Ambiente di runtime (JRE). In altri linguaggi di programmazione, il compilatore produce codice macchina per un particolare sistema. Tuttavia, il Java il compilatore produce codice per una macchina virtuale nota come Java Macchina virtuale.
Come funziona la JVM?
In primo luogo, Java Il codice viene compilato in bytecode. Questo bytecode viene interpretato su macchine diverse. Tra il sistema host e il Java sorgente, il bytecode è un linguaggio intermedio. JVM in Java è responsabile dell'allocazione dello spazio di memoria.
Lavoro di Java Macchina virtuale (JVM)
Archistruttura di JVM (Java Macchina virtuale)
Ora, cerchiamo di capire l'architettura della JVM. L'architettura della JVM in Java contiene un classloader, un'area di memoria, un motore di esecuzione e altro ancora.
Java Macchina virtuale Architectura
1) Caricatore di classi
Il class loader è un sottosistema utilizzato per caricare i file di classe. Svolge tre funzioni principali: caricamento, collegamento e inizializzazione.
2) Area Metodo
L'area dei metodi della JVM memorizza le strutture delle classi, come i metadati, il pool di runtime delle costanti e il codice dei metodi.
3) Mucchio
Tutto l' Oggetti, le variabili di istanza correlate e gli array vengono archiviati nell'heap. Questa memoria è comune e condivisa tra più thread.
4) Stack del linguaggio JVM
Java Gli stack del linguaggio memorizzano le variabili locali e i loro risultati parziali. Ogni thread ha il proprio stack JVM, creato simultaneamente alla creazione del thread stesso. Un nuovo frame viene creato ogni volta che viene richiamato un metodo e viene eliminato al termine del processo di invocazione del metodo.
5) Registri PC
Il registro del PC memorizza l'indirizzo del Java istruzione della macchina virtuale attualmente in esecuzione. In Java, ogni thread ha il proprio registro PC separato.
6) Stack di metodi nativi
Gli stack dei metodi nativi contengono le istruzioni del codice nativo che dipendono dalla libreria nativa. È scritto in un altro linguaggio invece di Java.
7) Motore di esecuzione
Il motore di esecuzione legge il bytecode e lo esegue pezzo per pezzo. Utilizza un interprete e un compilatore Just-In-Time (JIT) per convertire il bytecode in codice macchina nativo ed eseguirlo.
8) Interfaccia del metodo nativo
La Native Method Interface è un framework di programmazione. Permette Java codice in esecuzione in una JVM per chiamare, ed essere chiamato da, applicazioni e librerie native.
9) Librerie di metodi nativi
Native Libraries è una raccolta di librerie native (C, C++) necessari al motore di esecuzione.
Software Code Processo di compilazione ed esecuzione
Per scrivere ed eseguire un programma software, sono necessari i seguenti elementi:
- 1) Editore – Per digitare il programma, si può usare un blocco note.
- 2) Compiler – Per convertire il tuo programma in un linguaggio di alto livello in codice macchina nativo.
- 3) Collegamento – Per combinare i diversi riferimenti ai file di programma presenti nel programma principale.
- 4) Caricatore – Per caricare i file dal dispositivo di archiviazione secondario, come un disco rigido, una chiavetta USB o un CD, nella RAM per l'esecuzione. Il caricamento avviene automaticamente all'esecuzione del codice.
- 5) Esecuzione – L'effettiva esecuzione del codice, gestita dal sistema operativo e dal processore.
Con queste premesse, fai riferimento al seguente video e scopri il funzionamento interno e l'architettura della JVM (Java macchina virtuale).
Clicchi Qui. se il video non è accessibile
Processo di compilazione ed esecuzione del codice C
Per capire il Java Processo di compilazione: diamo prima una rapida occhiata al processo di compilazione e collegamento in C.
Supponiamo che nella funzione main siano state chiamate due funzioni, f1 e f2. La funzione main è memorizzata nel file a1.c.
La funzione f1 è memorizzata nel file a2.c.
La funzione f2 è memorizzata nel file a3.c.
Tutti questi file, ovvero a1.c, a2.c e a3.c, vengono passati al compilatore, il cui output sono i corrispondenti file oggetto, che rappresentano il codice macchina.
Il passo successivo consiste nell'integrare tutti questi file oggetto in un singolo file .exe con l'aiuto di un linker. Il linker raggrupperà tutti questi file e genererà il file .exe.
Durante l'esecuzione del programma, un programma di caricamento caricherà a.exe nel RAM per l'esecuzione.
Java Compilazione ed esecuzione del codice in Java VM
Ora esaminiamo il processo per JavaNel tuo file main, hai due metodi, f1 e f2.
- Il metodo principale è memorizzato nel file a1.java
- f1 è memorizzato in un file come a2.java
- f2 è memorizzato in un file come a3.java
Il compilatore compilerà i tre file e produrrà tre file .class corrispondenti, che consistono in codice BYTE. A differenza del linguaggio C, non viene effettuato alcun collegamento.
Migliori Java VM, oro Java La macchina virtuale risiede nella RAM. Durante l'esecuzione, tramite il class loader, i file di classe vengono caricati nella RAM. Il bytecode viene verificato per individuare eventuali falle di sicurezza.
Successivamente, il motore di esecuzione convertirà il bytecode in codice macchina nativo. Questa è la compilazione just-in-time. È uno dei motivi principali per cui Java è relativamente lento.
NOTA: JIT, o compilatore Just-in-time, è la parte del Java Macchina virtuale (JVM). Interpreta simultaneamente parti del bytecode che hanno funzionalità simili.
Perché è Java sia il linguaggio interpretato che quello compilato?
Linguaggi di programmazione sono classificati come:
- Linguaggio di livello superiore, ad esempio, C++, Java
- Linguaggi di livello intermedio, ad esempio C
- Linguaggio di basso livello, ad esempio, Assembly
- Infine, il livello più basso è il linguaggio macchina.
A compilatore è un programma che converte un programma da un livello di linguaggio a un altro. Ad esempio, la conversione di un C++ programma in codice macchina. Il Java il compilatore converte il linguaggio di alto livello Java codice in bytecode (che è anch'esso un tipo di codice macchina).
An interprete è un programma che converte un programma di un livello in un altro linguaggio di programmazione stesso livello. Ad esempio, la conversione di un Java programma in C++.
In Java, il generatore di codice Just-In-Time converte il bytecode in codice macchina nativo, che si trovano agli stessi livelli di programmazione. Pertanto, Java è un linguaggio sia compilato che interpretato.
Perché è Java lento?
Le due ragioni principali dietro la lentezza di Java siamo:
- Collegamento dinamico: A differenza del C, il collegamento viene eseguito in fase di esecuzione, ogni volta che il programma viene eseguito Java.
- Interprete in fase di esecuzione: La conversione del codice byte in codice macchina nativo viene eseguita in fase di esecuzione in Java, il che rallenta ulteriormente la velocità.
Tuttavia, le ultime versioni di Java hanno affrontato in larga misura questi colli di bottiglia prestazionali.











