Java-virtuaalikone - Opas arkkitehtuuriin JVM ja sen komponentti

Sisällysluettelo:

Anonim

Johdatus Java-virtuaalikoneeseen

Tässä artikkelissa opitaan Java-virtuaalikoneesta, nimeltään “JVM”. Java-virtuaalikone on virtuaalikone, jonka avulla tietokonejärjestelmä voi suorittaa / suorittaa Java-ohjelmia. Pohjimmiltaan JVM on moottori, joka toimii runtime-ympäristöna Java-koodille. JVM muuntaa Java-koodin konekieleksi. Kun suoritat käännetyn .class-tiedoston, se menee JVM: lle ja sitten JVM palauttaa tulosteen. Java Virtual Machine on osa JRE: tä, joka tarkoittaa ”Java Runtime Environment”. Java-virtuaalikoneen perustehtävät koostuvat koodin lataamisesta, koodin tarkistamisesta ja suorittamisesta. Tarjoa myös runtime-ympäristö koodin suorittamiseen. JVM koostuu useista komponenteista, kuten Classloader, JVM: n nimeämä tilaluettelo, kuten Stack, Execution Engine ja muutamista alkuperäisistä kirjastoista.

Java-virtuaalikoneen arkkitehtuuri

Kuten yllä olevassa kuvassa näkyy, Java Virtual Machine Architecture koostuu useista komponenteista. Oppitaan jokaista tiettyä komponenttia erikseen.

loader

Kuten nimestä voi päätellä, se on luokan tiedostojen lataamisesta vastuussa oleva komponentti. Latausohjelman tärkeimmät toiminnot ovat lataaminen, linkittäminen ja luokitiedoston alustaminen. Kuormaaja tekee sen toimivana ajon aikana.

  • Lataus: Periaatteessa lataaja lukee .class-tiedoston, luo sitten binäärikoodin ja tallentaa sen menetelmäalueelle. Bootstrap Classloader, Extension Classloader ja Application Classloader ovat erilaisia ​​ClassLoaders-laitteita, jotka vastaavat eri luokkien lataamisesta.
  • Linkittäminen: Kolme päätoimintoa, kuten varmennus, valmistelu ja ratkaisu. Se alkaa .class-tiedoston varmennuksella. Jos vahvistus epäonnistuu, se antaa poikkeuksen ajoajan varmennuksesta. Myöhemmin muisti allokoidaan muuttujille oletusarvoilla. Sitten lopuksi symbolinen muistiviittaus korvataan suoralla viittauksella muistialueelta.
  • Alustaminen: Tämä on viimeinen osa ClassLoaderia. Alkuperäiset arvot määritetään kaikille staattisille muuttujille, minkä jälkeen suoritetaan staattinen lohko. Tämä osa suoritetaan luokan ylhäältä alas.

Pino

Tiedot objektista ja ilmentymän muuttujat tallennetaan kaikki tähän. Se on jaettu muistialue, mikä tarkoittaa, että tähän tallennettu tieto ei ole langansuojattu.

Poikkeus säikeen ”pää” java.lang.OutOfMemoryError: Java-kasatila

Yksi relatiivisimmista virheistä on ”OutOfMemoryError -poikkeus, joka tarkoittaa, että JVM ei voi allokoida objektia kasan alueella tai muistin varaamista ei voida suorittaa samalle objektille.

Pino

Tässä luodaan erillinen ajonaikainen pino jokaiselle uudelle säieelle. Tunnetaan myös nimellä run-time pino, joka kerta kun menetelmää kutsutaan, kaikki yksityiskohdat tallennetaan vastaavaan suoritustasoon ja menetelmän suorittamisen jälkeen nämä yksityiskohdat poistetaan pinosta.

PC-rekisterit

Jokaista yksittäistä säiettä varten luodaan erillinen PC (Program Counter) -rekisteri, joka tallentaa nykyisen suorituskäskyn osoitteen, joka myöhemmin päivitetään seuraavalla käskyllä. Tämä muistialue on melko pieni ja kiinteän kokoinen.

Alkuperäisen menetelmän pino

Se on yksi omaa tyyppistä muistialuetta, johon lanka vetoaa, ja sitten lanka on aivan uudella tasolla, jossa Java-virtuaalikoneen asettamat rakenne- ja turvallisuusrajoitukset eivät ole enää käytössä. Verrattuna muihin suorituksenaikaisiin muistialueisiin, natiivimenetelmäpinojen käyttämällä muistilla ei ole kiinteää kokoa, ilman lisäyksiä tai pienennyksiä.

Java-alkuperäinen käyttöliittymä

JNI on vain vuorovaikutuksessa alla mainittujen alkuperäismenetelmäkirjastojen kanssa, jotka ovat toteutettu C, C ++, ja tarjoavat saman suoritusmoottorille. JNI sallii suoran pääsyn kokoonpanokoodiin. JVM: lle Java ja Native ovat kahta tyyppisiä koodeja. JNI luo sujuvasti hyvin määritellyn yhteyden näiden kahden välillä.

Alkuperäisen menetelmän kirjastot

Alkuperäisten kirjastojen kokoelma, kuten Execution Engine vaatii.

Suoritusmoottori

No, meillä on nyt java-ohjelma tavukoodiksi, joka on osoitettu yllä selitetyille data-alueille luokkakuormaajan kautta, ja nyt tavukoodi suorittaa toteutusmoottorin. Suoritusmoottori vain lukee tavukoodin yksiköissä, kuten kone, joka lukee koodirivit yksitellen. Tavukoodi on ihmisen luettavissa oleva muoto, minkä vuoksi kone ei pysty lukemaan sitä, sillä se on, ja se on muunnettava koneellisesti luettavaan muotoon, jossa alla olevia komponentteja käytetään tulkintatarkoitukseen.

Suoritusmoottorissa on kolme pääkomponenttia, jotka ovat tulkki, JIT-kääntäjä ja roskienkeräin.

1. Tulkki

Suorittaa yksinkertaisesti tavukoodin peräkkäisellä menetelmällä. Puhelu tehdään komentorivikyselyllä, jonka perusteena on käännetty tiedosto. Tulkki tulkitsee ja suorittaa komennot yksitellen melko nopeasti, mikä tapahtuu nopeammin kuin JIT-kääntäjä koodin kääntämiseen.

java-luokan nimi

Pääluokan () on oltava käännetyssä .class-tiedostossa.

2. JIT-kääntäjä

Yksi Java Runtime Environment -ympäristön tärkeimmistä komponenteista, joka parantaa Java-sovelluksen suorituskykyä ajon aikana. Mikään muu komponentti ei vaikuta suorituskykyyn enemmän kuin JIT Compiler. Tämä on oletuskääntäjä, joka aktivoidaan, kun jotain Java-menetelmää kutsutaan.

3. Roskakori

Kuten nimestä voi päätellä, sillä on jotain tekemistä roskien kanssa, roskienkerääjä yksinkertaisesti etsii kaikkia mahdollisia esineitä, jotka ovat käytettävissä JVM-kasa-tilassa, tarkistaa, onko se käytössä, ja poistaa sitten käyttämättömät. Joten se merkitsee vain muistin kappaleet, jotka ovat käytössä tai joita ei käytetä. Sitten se lakaistaan, jolloin se yksinkertaisesti poistaa merkityn esineen. Paras käyttötapa on, että manuaalista muistinvarausjärjestelmää ei tarvita, koska Roskakori poistaa käyttämättömän muistitilan automaattisesti. Mutta koska tämä on automaattinen tehtävä, yksikään ohjelmoija ei hallitse minkään aikavälin ajoittamista erityisesti puhdistustehtävälle, ja se vaatii enemmän CPU-virtaa etsiessään kohdeviitteitä.

johtopäätös

Vaikka ei ole pakollista, että sinulla on selkeä käsitys JVM: n toiminnasta, Java-koodin kirjoittamiseen se on erittäin hyödyllinen. Kehittäjälle, joka ymmärtää JVM: n toiminnan, hän kirjoittaa paremman ja optimoidun koodin, olipa vaatimus pitkä tai monimutkainen. Tässä esitetyn kuvauksen lisäksi JVM tarjoaa laajan valikoiman ominaisuuksia ja tekniikoita. Näitä ominaisuuksia voidaan käyttää suorituskyvyn parantamiseen tietyn myyjän tarpeiden mukaan

Suositellut artikkelit

Tämä on opas Java-virtuaalikoneeseen. Tässä keskustellaan Java-virtuaalikoneen arkkitehtuurista ja sen eri komponenteista. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -

  1. Kupla Lajittele JavaScript
  2. Langan elinkaari Java-versiossa
  3. Mikä on Java SE?
  4. Parhaat Java-kääntäjät
  5. JRE vs. JVM | 8 parasta eroa (infografia) kanssa