Java virtuaalmasin - JVMi ja selle komponendi arhitektuuri juhend

Lang L: none (table-of-contents):

Anonim

Java virtuaalmasina tutvustus

Selles artiklis õpime tundma Java virtuaalmasinat, teise nimega “JVM”. Java virtuaalmasin on virtuaalne masin, mis võimaldab arvutisüsteemil Java programme käivitada / käivitada. Põhimõtteliselt on JVM mootor, mis töötab Java-koodi käituskeskkonnana. JVM teisendab java-koodi masinkeelde. Kui käivitate kompileeritud .class-faili, läheb see JVM-i ja siis JVM tagastab väljundi. Java virtuaalmasin on osa JRE-st, mis tähistab “Java Runtime Environment”. Java virtuaalmasina põhiülesanded seisnevad koodi laadimises, seejärel koodi kinnitamises ja käivitamises. Pakkuge ka käituskeskkond koodi täitmiseks. JVM koosneb mitmetest komponentidest, näiteks Classloader, JVM-i määratud ruumi loend, nagu näiteks Stack, Execution Engine ja mõnest pärisraamatukogust.

Java virtuaalmasina arhitektuur

Nagu ülaltoodud pildil näha, koosneb Java virtuaalse masina arhitektuur mitmesugustest komponentidest. Õpime tundma iga konkreetse komponendi kohta eraldi.

Laadur

Nagu nimigi ütleb, vastutab see klassi failide laadimise eest. Laaduri peamised funktsioonid on klassifaili laadimine, linkimine ja lähtestamine. Laadur töötab selle tööajaga.

  • Laadimine: põhimõtteliselt loeb laadur .class-faili, genereerib seejärel kahendkoodi ja salvestab selle meetodialasse. Bootstrap Classloader, Extension Classloader ja Application Classloader on erinevad ClassLoaders, mis vastutavad erinevate klasside laadimise eest.
  • Lingimine: kolm peamist funktsiooni, nagu kontrollimine, ettevalmistamine ja lahendamine. See algab .class-faili kontrollimisega. Kui kinnitamine ebaõnnestub, annab see käitusaja kontrollimise erandi. Hiljem eraldatakse mälu vaikeväärtustega muutujatele. Lõpuks asendatakse sümboolsed mäluviited otsese viitega mälualale.
  • Alustamine: see on ClassLoaderi viimane osa. Kõigile staatilistele muutujatele omistatakse algväärtused, millele järgneb staatilise ploki täitmine. See osa täidetakse klassi ülaosast allapoole.

Hunnik

Objekti üksikasjad ja esinemismuutujad on kõik siia salvestatud. See on jagatud mälu piirkond, mis tähendab, et siin salvestatud andmed pole niidikindlad.

Erand lõimes „pea” java.lang.OutOfMemoryError: Java kuhja ruumi

Üks kõige paremini seostatavaid tõrkeid on erand „OutOfMemoryError , mis tähendab, et JVM ei saa objekti Hunnikus eraldada või mälu ei saa sama objekti jaoks teha.

Korstnat

Siin luuakse iga uue lõime jaoks eraldi käitusaja virn. Tuntud ka kui Run-Time Stack, iga kord, kui kutsutakse üles mõni meetod, salvestatakse kõik üksikasjad vastavasse käitusajakogusse ja pärast meetodi lõpuleviimist eemaldatakse need üksikasjad virnast.

PC-registrid

Iga lõime jaoks luuakse eraldi arvuti (programmiloenduri) register, kuhu salvestatakse praeguse täitmiskäsu aadress, mida hiljem uuendatakse järgmise juhisega. See mäluala on üsna väike ja kindla suurusega.

Pärismeetodi virn

See on üks oma tüüpi mälupiirkondi, millele lõim tugineb, ja siis on see lõime täiesti uuel tasemel, kus Java Virtual Machinei seatud struktuuri- ja turbepiiranguid enam ei kasutata. Võrreldes teiste käitusaja mälupiirkondadega pole natiivmeetodi virnade poolt hõivatud mälul kindel maht, suurendamisel või vähendamisel pole piiranguid.

Java omapärane liides

JNI suhtleb lihtsalt allpool mainitud looduslike meetodite teekidega, mis on rakendatud C, C ++ ja pakuvad sama täitmismootorile. JNI lubab otsest juurdepääsu montaažikoodile. JVM-i puhul on Java ja Native kaks tüüpi koodid. JNI loob sujuvalt täpselt määratletud seose nende kahe vahel.

Pärismeetodi teegid

Natiivraamatukogude kogu, vastavalt täitmismootori nõudmistele.

Täitmismootor

Noh, nüüd on meil java-programm baitkoodiks, mis on klassilaaduri kaudu määratud eespool selgitatud andmealadele ja nüüd täidab baitkood täitemootor. Täitmismootor loeb lihtsalt baitkoodi ühikutes, nagu masin, mis loeb koodiridu ükshaaval. Baidikood on inimloetav vorming, mistõttu masin seda lugeda ei saa, see on see ja see tuleb teisendada masinloetavasse vormingusse, kus tõlgendamise eesmärgil kasutatakse allpool toodud komponente.

Täitmismootoril on kolm peamist komponenti, milleks on tõlk, JIT-kompilaator ja prügikoguja.

1. Tõlk

Lihtsalt käivitab baitkoodi järjestikulisel meetodil. Kõne tehakse käsurida päringuga, argumendina kompileeritud fail. Tõlk tõlgendab ja täidab käske ükshaaval üsna kiiresti, mis toimub kiiremini kui JIT-i kompilaator koodi kompileerimiseks.

java klassi nimi

Peamine () klass peab olema kompileeritud .class-failis.

2. JIT koostaja

Java Runtime Environment üks olulisemaid komponente, mis parandab Java-rakenduse jõudlust töö ajal. Ükski teine ​​komponent ei mõjuta jõudlust rohkem kui JIT-kompilaator. See on vaikimisi kompilaator ja see aktiveeritakse iga Java-meetodi kutsumisel.

3. Prügivedu

Nagu nimigi ütleb, on sellel midagi pistmist prügiga, prügikoguja otsib lihtsalt kõik JVM-i hunnikus saadaolevad objektid, kontrollib, kas see on kasutuses, ja kustutab kasutamata objektid. Niisiis, see tähistab lihtsalt mälu tükke, mis on kasutuses või mitte. Seejärel läheb see pühkimisele, kus see eemaldab lihtsalt tähistatud objekti. Parim võimalus on see, et käsitsi mälu jaotussüsteemi pole vaja, kuna prügikoguja eemaldab kasutamata mäluruumi automaatselt. Kuna tegemist on automaatse toiminguga, ei ole ühelgi programmeerijal konkreetset puhastamistoimingu jaoks vajaliku ajapilu ajastamist üle kontrollimine ja objektide viidete otsimisel nõuab ta rohkem protsessori toidet.

Järeldus

Ehkki JVM-i toimimisest selge mõistmine ei ole kohustuslik, on Java-koodi kirjutamisest sellest tohutult kasu. Arendajale, kes mõistab JVM-i tööd, kirjutab ta parema ja optimeeritud koodi, hoolimata sellest, kui pikk või keeruline nõue on. Lisaks siin esitatud kirjeldusele pakub JVM laia valikut funktsioone ja tehnoloogiaid. Neid funktsioone saab kasutada toimivuse parandamiseks vastavalt konkreetse müüja vajadustele

Soovitatavad artiklid

See on Java virtuaalmasina juhend. Siin käsitleme java virtuaalmasina arhitektuuri koos selle erinevate komponentidega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. Mull Sorteeri JavaScriptis
  2. Keerme elutsükkel Java-s
  3. Mis on Java SE?
  4. Parimad Java kompilaatorid
  5. JRE vs JVM | 8 parimat erinevust (infograafika)