logo

JVM (Java virtualios mašinos) architektūra

  1. Java virtuali mašina
  2. JVM vidaus architektūra

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
  1. Specifikacija kur nurodytas Java virtualios mašinos veikimas. Tačiau diegimo teikėjas pasirenka algoritmą nepriklausomai. Jį įgyvendino „Oracle“ ir kitos įmonės.
  2. Įgyvendinimas Jo įgyvendinimas žinomas kaip JRE (Java Runtime Environment).
  3. 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.

JVM architektūra

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.

    Bootstrap ClassLoader: Tai yra pirmoji klasės įkėlimo programa, kuri yra aukščiausios klasės plėtinio klasės įkėlimo programa. Jis įkelia rt.jar failą, kuriame yra visi „Java Standard Edition“ klasių failai, tokie kaip java.lang paketų klasės, java.net paketų klasės, java.util paketų klasės, java.io paketų klasės, java.sql paketų klasės ir kt.Išplėtimo ClassLoader: Tai yra antrinė Bootstrap klasės įkėlimo programa ir pagrindinė sistemos įkėlimo priemonė. Jis įkelia jar failus, esančius viduje $JAVA_HOME/jre/lib/ext katalogas.Sistemos / Programos ClassLoader: Tai yra Extension classloader antrinė klasė. Jis įkelia klasės failus iš klasės kelio. Pagal numatytuosius nustatymus klasės kelias yra nustatytas į dabartinį katalogą. Galite pakeisti klasės kelią naudodami jungiklį „-cp“ arba „-classpath“. Jis taip pat žinomas kaip Application classloader.
 //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:

    Virtualus procesorius Vertėjas:Perskaitykite baito kodo srautą, tada vykdykite instrukcijas.„Just-In-Time“ (JIT) kompiliatorius:Jis naudojamas našumui pagerinti. JIT tuo pačiu metu kompiliuoja baitų kodo dalis, kurios turi panašias funkcijas, taigi sumažina kompiliavimui reikalingą laiką. Čia terminas „kompiliatorius“ reiškia vertėją iš „Java“ virtualiosios mašinos (JVM) instrukcijų rinkinio į konkretaus procesoriaus instrukcijų rinkinį.

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.