Ce este JVM?
Java Virtual Machine (JVM) este un motor care oferă un mediu de rulare pentru a conduce codul Java sau aplicațiile. Convertește codul secundar Java în limbajul mașinilor. JVM face parte din Java Run Environment (JRE). În alte limbaje de programare, compilatorul produce codul mașinii pentru un anumit sistem. Cu toate acestea, compilatorul Java produce cod pentru o mașină virtuală cunoscută sub numele de mașină virtuală Java.
Iată cum funcționează JVM
În primul rând, codul Java este respectat în bytecode. Acest bytecode este interpretat pe diferite mașini
Între sistemul gazdă și sursa Java, Bytecode este un limbaj intermediar.
JVM în Java este responsabil pentru alocarea spațiului de memorie.
În acest tutorial JVM, veți învăța-
- JVM Architecture
- Procesul de compilare și executare a codului software
- Procesul de compilare și executare a codului C
- Procesul de compilare și executare a codului Java
- De ce este interpretat Java și limbajul compilat?
- De ce este Java lent?
JVM Architecture
Acum, în acest tutorial JVM, să înțelegem Arhitectura JVM. Arhitectura JVM în Java conține clasificator, zonă de memorie, motor de execuție etc.1) ClassLoader
Încărcătorul de clase este un subsistem utilizat pentru încărcarea fișierelor de clasă. Îndeplinește trei funcții majore și anume. Încărcare, conectare și inițializare.
2) Zona metodei
JVM Method Area stochează structuri de clasă cum ar fi metadatele, pool-ul de runtime constant și codul pentru metode.
3) Heap
Toate obiectele, variabilele de instanță aferente și matricele sunt stocate în heap. Această memorie este comună și partajată pe mai multe fire.
4) Stive de limbaj JVM
Stivele de limbaj Java stochează variabile locale și sunt rezultate parțiale. Fiecare fir are propria stivă JVM, creată simultan pe măsură ce este creat firul. Un nou cadru este creat ori de câte ori este invocată o metodă și este șters când procesul de invocare a metodei este finalizat.
5) Registre PC
Registrul PC stochează adresa instrucțiunii mașinii virtuale Java care se execută în prezent. În Java, fiecare fir are registrul PC separat.
6) Stive de metode native
Stivele de metode native conțin instrucțiunile codului nativ depinde de biblioteca nativă. Este scris în altă limbă în loc de Java.
7) Motor de execuție
Este un tip de software folosit pentru a testa hardware, software sau sisteme complete. Motorul de execuție a testului nu poartă niciodată informații despre produsul testat.
8) Interfață metodă nativă
Interfața Native Method este un cadru de programare. Permite codului Java care rulează într-o JVM să apeleze prin biblioteci și aplicații native.
9) Biblioteci de metode native
Biblioteci native este o colecție de biblioteci native (C, C ++) de care este nevoie motorul de execuție.
Procesul de compilare și executare a codului software
Pentru a scrie și a executa un program software, aveți nevoie de următoarele
1) Editor - Pentru a introduce programul dvs., ar putea fi utilizat un blocnotes
2) Compilator - Pentru a vă converti programul în limbă înaltă în codul mașinii native
3) Linker - Pentru a combina împreună diferite fișiere de program de referință în programul dvs. principal.
4) Loader - Pentru a încărca fișierele de pe dispozitivul dvs. de stocare secundar, cum ar fi Hard Disk, Flash Drive, CD în RAM pentru executare. Încărcarea se face automat când executați codul.
5) Executare - Executarea efectivă a codului care este gestionat de sistemul dvs. de operare și procesor.
În acest context, consultați următorul videoclip și aflați cum funcționează și arhitectura internă JVM a JVM (Java Virtual Machine).
Faceți clic aici dacă videoclipul nu este accesibil
Procesul de compilare și executare a codului C
Pentru a înțelege procesul de compilare Java în Java. Să analizăm mai întâi procesul de compilare și legare în C.
Să presupunem că, în principal, ați numit două funcții f1 și f2. Funcția principală este stocată în fișierul a1.c.
Funcția f1 este stocată într-un fișier a2.c
Funcția f2 este stocată într-un fișier a3.c
Toate aceste fișiere, adică a1.c, a2.c și a3.c, sunt transmise compilatorului. Al cărui rezultat este fișierele obiect corespunzătoare care sunt codul mașinii.
Următorul pas este integrarea tuturor acestor fișiere obiect într-un singur fișier .exe cu ajutorul linker-ului. Linkerul va asocia toate aceste fișiere împreună și va produce fișierul .exe.
În timpul rulării programului, un program de încărcare va încărca a.exe în RAM pentru execuție.
Compilarea și executarea codului Java în Java VM
Acum, în acest tutorial JVM, să ne uităm la procesul pentru JAVA. În principal, aveți două metode f1 și f2.
- Metoda principală este stocată în fișierul a1.java
- f1 este stocat într-un fișier ca a2.java
- f2 este stocat într-un fișier sub forma a3.java
Compilatorul va compila cele trei fișiere și produce 3 fișiere .class corespunzătoare care constă din cod BYTE. Spre deosebire de C, nu se face nicio legătură .
Java VM sau Java Virtual Machine se află pe RAM. În timpul execuției, folosind încărcătorul de clase, fișierele de clasă sunt aduse pe RAM. Codul BYTE este verificat pentru orice încălcare a securității.
Apoi, motorul de execuție va converti Bytecode în codul mașinii native. Aceasta este doar la compilarea timpului. Este unul dintre principalele motive pentru care Java este relativ lent.
NOTĂ: JIT sau compilatorul Just-in-Time face parte din Java Virtual Machine (JVM). Interpretează o parte din codul de octeți care are funcționalități similare în același timp.
De ce Java este interpretat și limbajul compilat?
Limbajele de programare sunt clasificate ca- Limbaj de nivel superior Ex. C ++, Java
- Limbi de nivel mediu Ex. C
- Limbaj de nivel scăzut Ex Ansamblu
- în cele din urmă cel mai scăzut nivel ca Limbajul Mașinii.
Un compilator este un program care convertește un program de la un nivel de limbă la altul. Exemplu de conversie a programului C ++ în codul mașinii.
Compilatorul java convertește codul java la nivel înalt în bytecode (care este, de asemenea, un tip de cod mașină).
Un interpret este un program care convertește un program la un nivel la un alt limbaj de programare la același nivel. Exemplu de conversie a programului Java în C ++
În Java, generatorul Just In Time Code convertește bytecode-ul în codul mașinii native care se află la aceleași niveluri de programare.
Prin urmare, Java este atât compilat, cât și limbaj interpretat.
De ce este Java lent?
Cele două motive principale din spatele încetinirii Java sunt
- Legare dinamică: spre deosebire de C, legătura se face în timpul rulării, de fiecare dată când programul este rulat în Java.
- Interpret în timp de execuție: conversia codului de octeți în cod de mașină nativ se face în timp de execuție în Java, ceea ce încetineste viteza
Cu toate acestea, cea mai recentă versiune de Java a abordat într-o mare măsură blocajele de performanță.
Rezumat :
- Forma completă a JVM este mașina virtuală Java. JVM în Java este motorul care conduce codul Java. Convertește codul secundar Java în limbajul mașinilor.
- Arhitectura JVM în Java conține clasificator, zonă de memorie, motor de execuție etc.
- În JVM, codul Java este compilat în bytecode. Acest bytecode este interpretat pe diferite mașini
- JIT înseamnă compilator Just-in-time. JIT este partea mașinii virtuale Java (JVM). Este folosit pentru a accelera timpul de execuție
- În comparație cu alte mașini de compilare, JVM în Java poate fi lent în executare.