Uvod v navidezni stroj Java
V tem članku bomo spoznali Java Virtual Machine, imenovan tudi JVM. Java Virtual Machine je navidezni stroj, ki omogoča, da računalniški sistem zažene / izvaja Java programe. V bistvu je JVM motor, ki deluje kot runtime okolje za kodo Java. JVM pretvori kodo Java v strojni jezik. Ko zaženete sestavljeno datoteko .class, gre v JVM in JVM vrne izhod. Java Virtual Machine je del JRE, ki pomeni "Java Runtime Environment". Osnovne naloge za navidezni stroj Java sestoji iz nalaganja kode, nato pa preverite kodo in izvršite kodo. Za izvedbo kode zagotovite tudi okolje izvajanja. JVM je sestavljen iz različnih komponent, kot so Classloader, seznam prostora, ki ga JVM dodeli kot Stack, Execution Engine in nekaj matičnih knjižnic.
Arhitektura navideznega stroja Java 
Kot je prikazano na zgornji sliki, je Java Virtual Machine Architecture sestavljena iz različnih komponent. Spoznajmo vsako posamezno komponento posebej.
Nakladalnik
Kot pove že ime, je komponenta odgovorna za nalaganje datotek razreda. Nalaganje, povezovanje in inicializiranje datoteke razreda so glavne funkcije nalagala. Nakladalnik to dela v času izvajanja.
- Nalaganje: Naložnik v bistvu prebere datoteko .class, nato ustvari binarno kodo in jo shrani v območje metode. Bootstrap Classloader, Extension Classloader in Application Classloader so različni ClassLoaders, ki so odgovorni za nalaganje različnih razredov.
- Povezovanje: Tri glavne funkcije, kot so preverjanje, priprava in reševanje. Začne se s preverjanjem datoteke .class. Če preverjanje ne uspe, daje izjemo preverjanja časa izvajanja. Kasneje je pomnilnik dodeljen spremenljivkam s privzetimi vrednostmi. Nato se končno simbolične reference spomina zamenjajo z neposrednimi referencami iz pomnilniškega področja.
- Pobuda: To je zadnji del programa ClassLoader. Izvirne vrednosti so dodeljene vsem statičnim spremenljivkam, ki jim sledi izvedba statičnega bloka. Ta del se izvaja od vrha do dna razreda.
Kup
Tu so shranjene podrobnosti spremenljivk predmeta in primerka. To je območje skupnega pomnilnika, kar pomeni, da tukaj shranjeni podatki niso varni z nitmi.
Izjema v temi "glavni" java.lang.OutOfMemoryError: Prostor za skupino Java
Ena izmed najbolj relativnih napak je izjema »OutOfMemoryError «, kar pomeni, da JVM ne more dodeliti predmeta v območju Heap ali dodeljevanja pomnilnika za isti objekt ni mogoče.
Zložite
Tu se ustvari ločen niz izvajalnih elementov za vsako novo nit. Znan tudi pod imenom Run-Time Stack, vsakič ko se prikliče metoda, se vse podrobnosti shranijo v ustrezno stojalo za čas izvajanja, po zaključku metode pa se te podrobnosti odstranijo iz sklada.
Registri računalnikov
Za vsako posamezno nit se ustvari ločen register računalnika (programski števec), ki shrani naslov trenutnega navodila za izvajanje, ki bo pozneje posodobljen z naslednjim navodilom. To pomnilniško območje je precej majhno in je določene velikosti.
Nativni način
Gre za svojevrstno pomnilniško območje, ki ga prikliče nit in nato je nit na povsem novi ravni, kjer struktura in varnostne omejitve, ki jih nalaga Java Virtual Machine, ne izvajajo več. V primerjavi z drugimi pomnilniškimi območji med izvajanjem pomnilnik, ki ga zasedajo izvorni načini metod, nima fiksne velikosti in nima nobenih omejitev pri povečanju ali zmanjšanju.
Java Native Vmesnik
JNI preprosto sodeluje s spodaj navedenimi knjižnicami Native Method knjižnic, ki se izvajajo v C, C ++, in zagotavljajo sistem za izvajanje. JNI dovoljuje neposreden dostop do kode za sestavljanje. Za JVM sta Java in Native dve vrsti kod. JNI gladko vzpostavlja dobro opredeljeno povezavo med tema dvema.
Knjižnice domorodnih metod
Zbirka domorodnih knjižnic, kot jo zahteva izvršilni mehanizem.
Izvedbeni motor
No, zdaj imamo java program v bajt kodi, ki je dodeljen zgoraj razloženim podatkovnim območjem prek učilnika razreda, zdaj pa bo bajt kodo izvajalnik. Execution Engine preprosto bere bajt kodo v enotah, kot je strojno branje vrstic v kodi, ena za drugo. Bajt kodo je človeško berljiv format, zato ga stroj ne more prebrati, zato ga je treba pretvoriti v strojno berljiv format, kjer se za interpretacijo uporabljajo spodnje komponente.
Execution Engine ima tri glavne sestavne dele, to so Interpreter, JIT Compiler in Garbage Collector.
1. Tolmač
Preprosto, izvrši bajt kodo v zaporedni metodi. Klic opravi poizvedba v ukazni vrstici z sestavljeno datoteko kot argumentom. Tolmač je dokaj hiter pri razlagi in izvajanju ukazov, enega za drugim, kar se zgodi hitreje kot prevajalnik JIT za sestavljanje kode.
ime razreda java
Glavni () razred mora biti v sestavljeni datoteki .class.
2. Prevajalnik JIT
Ena najpomembnejših komponent Java Runtime Environment, ki povečuje delovanje aplikacije Java v času izvajanja. Nobena druga komponenta nima večjega učinka na zmogljivost kot JIT Compiler. To je privzeti prevajalnik in se aktivira, ko se pokliče katera koli metoda Java.
3. Zbiralnik smeti
Kot že ime pove, ima nekaj opravka z smeti, Garbage Collector preprosto poišče vse mogoče predmete, ki so na voljo v prostoru za kopičenje JVM, preveri, ali je v uporabi, in nato izbriše neuporabljene. Torej preprosto označi koščke spomina, ki so v uporabi ali ne. Nato nadaljuje s pometanjem, kjer preprosto odstrani označen predmet. Najboljši primer je, da ni potreben sistem za ročno dodelitev pomnilnika, saj Garbage Collector sam opravi nalogo samodejnega odstranjevanja neporabljenega pomnilniškega prostora. Ker pa je to avtomatično opravilo, noben programer nima nadzora nad načrtovanjem časovnega rež za posebno čiščenje in ne potrebuje več moči CPU-ja, ko išče reference.
Zaključek
Čeprav ni nujno, da jasno razumete, kako deluje JVM, je za pisanje kode Java neizmerno koristno. Za razvijalca, ki razume delovanje JVM, bo napisal boljše in optimizirano kodo, ne glede na to, kako dolga ali zapletena je zahteva. JVM poleg opisa, ki je tu naveden, ponuja tudi široko paleto funkcij in tehnologij. Te funkcije lahko uporabite za izboljšanje zmogljivosti, kot jo potrebuje določen prodajalec
Priporočeni članki
To je vodnik za navidezni stroj Java. Tukaj razpravljamo o arhitekturi java virtualnega stroja skupaj z njegovimi različnimi komponentami. Če želite izvedeti več, si oglejte tudi naslednje članke -
- Bubble Razvrsti v JavaScript
- Življenjski cikel niti na Javi
- Kaj je Java SE?
- Najboljši Java Compilers
- JRE proti JVM | Najboljših 8 razlik z (Infographics)