JVM (Java Virtual Machine) yra abstrakti mašina. Tai specifikacija, suteikianti vykdymo aplinką, kurioje gali būti vykdomas Java baito kodas.
JVM yra prieinami daugeliui aparatinės ir programinės įrangos platformų (t. y. JVM priklauso nuo platformos).
Kas yra JVM
Tai yra:
spyruoklinių įrankių rinkinys
- Specifikacija kur nurodytas Java virtualios mašinos veikimas. Tačiau diegimo teikėjas pasirenka algoritmą nepriklausomai. Jį įgyvendino „Oracle“ ir kitos įmonės.
- Įgyvendinimas Jo įgyvendinimas žinomas kaip JRE (Java Runtime Environment).
- Vykdymo laikas Kai rašote java komandą komandų eilutėje, kad paleistumėte java klasę, sukuriamas JVM egzempliorius.
Ką tai daro
JVM atlieka šią operaciją:
- Įkeliamas kodas
- Tikrina kodą
- Vykdo kodą
- Suteikia vykdymo aplinką
JVM pateikia apibrėžimus:
- Atminties sritis
- Klasės failo formatas
- Registrų rinkinys
- Surinkta šiukšlių krūva
- Pranešti apie mirtiną klaidą ir pan.
JVM architektūra
Supraskime vidinę JVM architektūrą. Jame yra klasės įkėlimo programa, atminties sritis, vykdymo variklis ir kt.
1) Classloader
Classloader yra JVM posistemis, naudojamas klasių failams įkelti. Kai paleidžiame „Java“ programą, pirmiausia ją įkelia klasės įkėlimo programa. „Java“ yra trys integruotos klasės įkėlimo programos.
//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()); } }Išbandykite dabar
Išvestis:
sun.misc.Launcher$AppClassLoader@4e0e2f2a null
Tai yra „Java“ teikiamos vidinės klasės įkrovikliai. Jei norite sukurti savo klasės įkėlimo programą, turite išplėsti ClassLoader klasę.
2) Klasės (metodo) sritis
Klasės (metodo) srityje saugomos kiekvienos klasės struktūros, pvz., vykdymo laiko konstantos telkinys, lauko ir metodo duomenys, metodų kodas.
3) Krūva
Tai vykdymo laiko duomenų sritis, kurioje paskirstomi objektai.
Java trukmė
4) Sukrauti
„Java Stack“ saugo rėmelius. Jis turi vietinius kintamuosius ir dalinius rezultatus ir atlieka metodo iškvietimą ir grąžinimą.
Kiekviena gija turi privatų JVM krūvą, sukurtą tuo pačiu metu kaip ir gija.
Kiekvieną kartą, kai iškviečiamas metodas, sukuriamas naujas kadras. Kadras sunaikinamas, kai jo metodo iškvietimas baigiamas.
5) Programų skaitiklių registras
PC (programų skaitiklio) registre yra šiuo metu vykdomos Java virtualios mašinos komandos adresas.
6) Native Method Stack
Jame yra visi programoje naudojami vietiniai metodai.
7) Vykdymo variklis
Jame yra:
8) „Java Native“ sąsaja
„Java Native Interface“ (JNI) yra sistema, kuri suteikia sąsają bendrauti su kita programa, parašyta kita kalba, pvz., C, C++, Assembly ir kt. Java naudoja JNI sistemą, kad išsiųstų išvestį į konsolę arba sąveikautų su OS bibliotekomis.