logo

JVM (Java Virtual Machine) arhitektura

  1. Java virtualni stroj
  2. Unutarnja arhitektura JVM-a

JVM (Java Virtual Machine) je apstraktni stroj. To je specifikacija koja pruža runtime okruženje u kojem se može izvršiti java bytecode.

ipconfig za ubuntu

JVM-ovi su dostupni za mnoge hardverske i softverske platforme (tj. JVM ovisi o platformi).

Što je JVM

To je:

  1. Specifikacija gdje je specificiran rad Java Virtual Machine. Ali pružatelj implementacije neovisan je u odabiru algoritma. Njegovu implementaciju osigurali su Oracle i druge tvrtke.
  2. Implementacija Njegova implementacija poznata je kao JRE (Java Runtime Environment).
  3. Instanca vremena izvođenja Kad god napišete java naredbu na naredbenom retku za pokretanje java klase, stvara se instanca JVM.

Što to radi

JVM izvodi sljedeće operacije:

  • Učitava kod
  • Provjerava kod
  • Izvršava kod
  • Omogućuje runtime okruženje

JVM daje definicije za:

  • Područje memorije
  • Format datoteke klase
  • Registar set
  • Sakupljena gomila smeća
  • Prijava fatalne pogreške itd.

JVM arhitektura

Hajdemo razumjeti unutarnju arhitekturu JVM-a. Sadrži učitavač klasa, memorijsko područje, pogon za izvršavanje itd.

JVM arhitektura

1) Classloader

Classloader je podsustav JVM-a koji se koristi za učitavanje datoteka klasa. Kad god pokrenemo java program, prvo ga učitava classloader. Postoje tri ugrađena učitavača klasa u Javi.

    Bootstrap ClassLoader: Ovo je prvi classloader koji je super klasa Extension classloader-a. Učitava rt.jar datoteka koja sadrži sve datoteke klasa Java Standard Edition kao što su klase paketa java.lang, klase paketa java.net, klase paketa java.util, klase paketa java.io, klase paketa java.sql itd.Extension ClassLoader: Ovo je podređeni učitavač klasa Bootstrapa i nadređeni učitavač razreda učitavača klasa sustava. Učitava jar datoteke koje se nalaze unutra $JAVA_HOME/jre/lib/ext imenik.System/Application ClassLoader: Ovo je podređeni učitavač klasa Extension classloader. Učitava classfiles iz classpath. Prema zadanim postavkama, classpath je postavljen na trenutni direktorij. Možete promijeniti classpath koristeći '-cp' ili '-classpath' prekidač. Također je poznat kao 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()); } } 
Testirajte sada

Izlaz:

oštar kut
 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Ovo su interni učitavači klasa koje nudi Java. Ako želite stvoriti vlastiti učitavač klasa, trebate proširiti klasu Učitavača klasa.

2) Područje klase (metode).

Područje klase (metoda) pohranjuje strukture po klasama kao što su skup konstanti vremena izvođenja, podaci o polju i metodi, kod za metode.

3) Hrpa

To je područje podataka za vrijeme izvođenja u kojem se dodjeljuju objekti.

4) Stog

Java Stack pohranjuje okvire. Sadrži lokalne varijable i djelomične rezultate te igra ulogu u pozivanju i vraćanju metode.

Svaka nit ima privatni JVM stog, kreiran u isto vrijeme kad i nit.

Svaki put kada se pozove metoda kreira se novi okvir. Okvir se uništava kada se dovrši pozivanje njegove metode.

5) Registar programskog brojača

PC (brojač programa) registar sadrži adresu instrukcije Java virtualnog stroja koja se trenutno izvršava.

6) Native Method Stack

Sadrži sve izvorne metode korištene u aplikaciji.

cijepanje nizova c++

7) Izvršni motor

Sadrži:

    Virtualni procesor Tumač:Pročitajte tok bajt-koda i zatim izvršite upute.Just-In-Time (JIT) kompajler:Koristi se za poboljšanje performansi. JIT kompajlira dijelove bajt koda koji imaju sličnu funkcionalnost u isto vrijeme, i stoga smanjuje količinu vremena potrebnog za kompilaciju. Ovdje se izraz 'prevodilac' odnosi na prevoditelja iz skupa instrukcija Java virtualnog stroja (JVM) u skup instrukcija određenog CPU-a.

8) Java izvorno sučelje

Java izvorno sučelje (JNI) je okvir koji pruža sučelje za komunikaciju s drugom aplikacijom napisanom na drugom jeziku kao što su C, C++, Assembly itd. Java koristi JNI okvir za slanje izlaza na konzolu ili interakciju s bibliotekama OS-a.