Cos'è JVM? Java Macchina virtuale Architectura
In cosa consiste la JVM? Java?
Java Macchina virtuale (JVM) è un motore che fornisce un ambiente runtime per gestire Java Codice o applicazioni. Si converte Java bytecode nel 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, 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 Java fonte, Bytecode è un linguaggio intermedio. JVM in Java è responsabile dell'allocazione dello spazio di memoria.

In questo tutorial JVM imparerai:
Archistruttura di JVM (Java Macchina virtuale)
Ora in questo tutorial JVM, comprendiamo il Archistruttura della JVM. Architettura JVM in Java contiene classloader, area di memoria, motore di esecuzione ecc.
1) Caricatore di classi
Il class loader è un sottosistema utilizzato per caricare i file di classe. Esegue tre funzioni principali, ovvero caricamento, collegamento e inizializzazione.
2) Area Metodo
L'area dei metodi JVM memorizza strutture di classi come metadati, pool di runtime costante e codice per i 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 di linguaggi JVM
Java Gli stack di linguaggio memorizzano variabili locali e i suoi risultati parziali. Ogni thread ha il suo stack JVM, creato simultaneamente alla creazione del thread. Un nuovo frame viene creato ogni volta che viene invocato un metodo e viene eliminato quando il processo di invocazione del metodo è completo.
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 suo registro PC separato.
6) Stack di metodi nativi
Gli stack di metodi nativi mantengono l'istruzione del codice nativo che dipende dalla libreria nativa. È scritto in un'altra lingua invece di Java.
7) Motore di esecuzione
È un tipo di software utilizzato per testare hardware, software o sistemi completi. Il motore di esecuzione del test non contiene mai alcuna informazione sul prodotto testato.
8) Interfaccia del metodo nativo
La Native Method Interface è un framework di programmazione. Permette Java codice in esecuzione in una JVM da chiamare da librerie e applicazioni native.
9) Librerie di metodi nativi
Native Libraries è una raccolta di Native Libraries(C, C++) necessari al motore di esecuzione.
Processo di compilazione ed esecuzione del codice software
Per scrivere ed eseguire un programma software, è necessario quanto segue
1) Editore – Per digitare il programma è possibile utilizzare un blocco note
2) Compiler – Per convertire il tuo programma in linguaggio elevato in codice macchina nativo
3) Collegamento – Per combinare insieme diversi riferimenti a file di programma nel programma principale.
4) Caricatore – Per caricare i file dal dispositivo di archiviazione secondario come disco rigido, unità flash, CD nella RAM per l'esecuzione. Il caricamento viene eseguito automaticamente quando esegui il codice.
5) Esecuzione – Esecuzione effettiva del codice gestito 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 in JavaDiamo prima un'occhiata veloce al processo di compilazione e collegamento in C.
Supponiamo che nel main, hai chiamato due funzioni f1 e f2. La funzione main è memorizzata nel file a1.c.
La funzione f1 è memorizzata in un file a2.c
La funzione f2 è memorizzata in un file a3.c
Tutti questi file, ovvero a1.c, a2.c e a3.c, vengono inviati al compilatore. Il cui output sono i file oggetto corrispondenti che sono il codice macchina.
Il passaggio successivo è l'integrazione di tutti questi file oggetto in un singolo file .exe con l'aiuto del linker. Il linker raggrupperà tutti questi file insieme e produrrà il file .exe.
Durante l'esecuzione del programma, un programma di caricamento caricherà a.exe nel file RAM per l'esecuzione.
Java Compilazione ed esecuzione del codice in Java VM
Ora in questo tutorial JVM, diamo un'occhiata al processo per JAVA. Nel tuo 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à 3 file .class corrispondenti costituiti da codice BYTE. A differenza di C, non viene eseguito alcun collegamento.
. Java V.M. o Java La macchina virtuale risiede nella RAM. Durante l'esecuzione, utilizzando il class loader, i file di classe vengono portati nella RAM. Il codice BYTE viene verificato per eventuali violazioni della 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 Il compilatore just-in-time è la parte di Java Macchina virtuale (JVM). Interpreta parte del Byte Code che ha funzionalità simili allo stesso tempo.
Perché è Java sia il linguaggio interpretato che quello compilato?
Linguaggi di programmazione sono classificati come
- Lingua di livello superiore, ad es. C++, Java
- Lingue di livello medio, ad es. C
- Linguaggio di basso livello Ex Assembly
- infine il livello più basso come il Linguaggio Macchina.
A compilatore è un programma che converte un programma da un livello di linguaggio a un altro. Esempio di conversione di C++ programma in codice macchina. Il compilatore Java converte il codice Java di alto livello in bytecode (che è anche un tipo di codice macchina).
An interprete è un programma che converte un programma a un livello in un altro linguaggio di programmazione allo stesso livello stesso livello. Esempio di conversione di Java programma in C++
In Java, il generatore di codice Just In Time converte il bytecode nel codice macchina nativo, che si trova agli stessi livelli di programmazione.
Quindi, Java è sia un linguaggio compilato che interpretato.
Perché è Java lento?
Le due ragioni principali dietro la lentezza di Java sono
- 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 che rallenta ulteriormente la velocità
Tuttavia, l'ultima versione di Java ha risolto in larga misura i colli di bottiglia prestazionali.
Sintesi:
- La forma completa di JVM è Java Macchina virtuale. JVM dentro Java è il motore che aziona il Java Codice. Si converte Java bytecode nel linguaggio macchina.
- Architettura JVM in Java contiene classloader, area di memoria, motore di esecuzione ecc.
- Nella JVM, Java il codice viene compilato in bytecode. Questo bytecode viene interpretato su macchine diverse
- JIT sta per compilatore Just-in-time. JIT è la parte del Java Macchina Virtuale (JVM). Viene utilizzata per accelerare i tempi di esecuzione
- Rispetto ad altre macchine compilatrici, JVM in Java potrebbe essere lento nell'esecuzione.