Java Virtual Machine - Vodič za arhitekturu JVM-a s njegovom sastavnicom

Sadržaj:

Anonim

Uvod u Java virtualni stroj

U ovom ćemo članku naučiti o Java virtualnom stroju, zvanom JVM. Java Virtual Machine je virtualni stroj koji računalnom sustavu omogućuje pokretanje / izvršavanje Java programa. JVM je u osnovi motor koji radi kao okruženje za vrijeme Java Java koda. JVM pretvara java kod u strojni jezik. Kada pokrenete sastavljenu datoteku .class, ona prelazi u JVM i tada JVM vraća izlaz. Java Virtualni stroj dio je JRE-a, što znači "Java Runtime Environment". Osnovni zadaci Java Java Virtual Machine sastoji se od Učitavanje koda, a zatim provjerite kôd i izvršite ga. Također, osigurajte okruženje za izvršavanje koda. JVM se sastoji od različitih komponenti poput Classloader-a, popisa prostora dodijeljenog od JVM-a poput Stack, Execution Engine i nekoliko izvornih knjižnica.

Arhitektura virtualnog stroja Java

Kao što je prikazano na gornjoj slici, Java Virtual Machine Architecture sastoji se od različitih komponenti. Naučimo o svakoj pojedinoj komponenti pojedinačno.

Utovarivač

Kao što ime govori, to je komponenta odgovorna za učitavanje datoteka Klasa. Učitavanje, povezivanje i inicijalizacija datoteke klase glavne su funkcije utovarivača. Utovarivač to radi za vrijeme izvođenja.

  • Učitavanje: Uopće učitač čita datoteku .class, zatim generira binarni kod i sprema ga u područje metode. Bootstrap Classloader, Extension Classloader i Application Classloader su razni ClassLoaders odgovorni za učitavanje različitih klasa.
  • Povezivanje: Tri glavne funkcije kao što su provjera, priprema i rješenje. Započinje provjerom datoteke .class. Ako provjera ne uspije, daje iznimku za provjeru vremena izvođenja. Kasnije se memorija dodjeljuje varijablama sa zadanim vrijednostima. Tada se, konačno, simboličke memorijske reference zamjenjuju izravnim referencama iz područja memorije.
  • Inicijalizacija: Ovo je završni dio ClassLoader-a. Izvorne vrijednosti dodjeljuju se svim statičkim varijablama, nakon čega slijedi izvršenje statičkog bloka. Ovaj se dio izvršava od vrha do dna klase.

Hrpa

Ovdje su pohranjeni detalji varijable objekta i instanci. To je zajedničko memorijsko područje, što znači da ovdje pohranjeni podaci nisu sigurni na niti.

Izuzetak u temi "glavni" java.lang.OutOfMemoryError: Java heap space

Jedna od najrelevantnijih grešaka je iznimka „OutOfMemoryError , što znači da JVM ne može dodijeliti objekt u području Heap ili se dodjela memorije ne može obaviti za isti objekt.

Stog

Ovdje se stvara zasebna hrpa vremena izvođenja za svaku novu nit. Poznat i kao, Run-Time Stack, svaki put kad se poziva metoda, svi se detalji pohranjuju u odgovarajuće stajalište vremena i nakon dovršetka metode ti se detalji uklanjaju iz snopa.

PC Registri

Za svaki pojedini niz kreira se zasebni registar računala (programski brojač) koji pohranjuje adresu trenutne upute za izvršavanje, koja će se kasnije ažurirati sljedećom uputama. Ovo je memorijsko područje prilično malo i fiksne je veličine.

Starosjedilački metod

To je jedna od vlastitih vrsta memorije koja se poziva na nit, a zatim je nit na potpuno novoj razini gdje struktura i sigurnosna ograničenja koja podrazumijeva Java Virtual Machine više ne djeluju. U usporedbi s ostalim područjima memorije za vrijeme izvođenja, memorija zauzeta izvornim nizovima metoda nema fiksnu veličinu, bez povećanja ili smanjenja.

Java Native sučelje

JNI jednostavno stupa u interakciju s dolje navedenim Bibliotekama izvornih metoda koji se primjenjuju C, C ++ i pružaju isti mehanizmu izvršenja. Izravni pristup šifri montaže dozvoljava JNI. Za JVM su Java i Native dvije vrste kodova. JNI glatko uspostavlja dobro definiranu vezu između to dvoje.

Narodne knjižnice

Zbirka zavičajnih biblioteka prema zahtjevu Izvršnog motora.

Izvršni motor

Eto, sada imamo java program u bajt kodu, koji je dodijeljen gore objašnjenim područjima podataka putem učitavača klase, a sada će bajt kod provoditi pokretački mehanizam. Execution Engine jednostavno čita bajt kod u jedinicama, poput strojno čitanje kodnih linija, jednu po jednu. Bajt kod je ljudski čitljiv format, zbog čega ga stroj ne može pročitati jer ga treba i treba ga pretvoriti u strojno čitljiv format, gdje se dolje navedene komponente koriste u svrhu tumačenja.

Execution Engine ima tri glavne komponente, a to su Interpreter, JIT Compiler i Garbage Collector.

1. Prevoditelj

Jednostavno, izvršava se bajt kod na sekvencijalnom metodom. Poziv upućuje na upit naredbenog retka s sastavljenom datotekom kao argumentom. Interpreter je prilično brz u tumačenju i izvršavanju naredbi, jedna za drugom, što se događa brže od JIT-ovog prevoditelja za sastavljanje koda.

ime klase java

Glavna () klasa mora biti u sastavljenoj datoteci .class.

2. JIT prevodilac

Jedna od najvažnijih komponenti Java Runtime okruženja, koja poboljšava performanse Java aplikacije u vrijeme izvođenja. Nijedna druga komponenta nema veći utjecaj na performanse od JIT Compilera. Ovo je zadani prevodilac i aktivira se kada se zove bilo koja Java metoda.

3. Skupljač smeća

Kao što ime sugerira, ima neke veze sa smećem, Garbage Collector jednostavno pretražuje svaki mogući objekt koji je dostupan u prostoru hrpe JVM-a, provjerava koristi li ga, a zatim briše neiskorišteni. Dakle, on jednostavno označava dijelove memorije koji se koriste ili ne koriste. Zatim se nastavlja brisanje, gdje se jednostavno uklanja označeni objekt. Najbolji je slučaj da nije potreban sustav ručne dodjele memorije jer Garbage Collector automatski obavlja posao uklanjanja neiskorištenog memorijskog prostora. No, budući da je ovo automatski zadatak, nijedan programer nema kontrolu nad zakazivanjem bilo kojeg vremenskog mjesta radi specifičnog zadatka čišćenja i zahtijeva više snage CPU-a dok traži reference objekata.

Zaključak

Iako nije obavezno imati jasno razumijevanje kako funkcionira JVM, u svrhu pisanja Java koda neizmjerno je korisno. Programeru koji razumije funkcioniranje JVM-a napisat će bolji i optimiziraniji kod, koliko god zahtjev bio zahtjevan ili složen. Uz ovdje navedeni opis, JVM nudi i širok spektar značajki i tehnologija. Ove se značajke mogu koristiti za poboljšanje performansi prema potrebi određenog dobavljača

Preporučeni članci

Ovo je vodič za Java virtualni stroj. Ovdje ćemo raspravljati o arhitekturi java virtualnog stroja zajedno s njegovim različitim komponentama. Možete pogledati i sljedeće članke da biste saznali više -

  1. Bubble Sort in JavaScript
  2. Životni ciklus teme u Javi
  3. Što je Java SE?
  4. Najbolji Java sastavljači
  5. JRE vs JVM | Top 8 razlike s (Infographics)