Mikä on JVM? Selitä JVM Archirakenne
⚡ Älykäs yhteenveto
Java Virtuaalikone (JVM) on moottori, joka tarjoaa ajonaikaisen ympäristön ohjattavaksi Java koodia, joka muuntaa alustariippumattoman tavukoodin natiiviksi konekieleksi. Se on osa Java Suoritusaikainen ympäristö ja mahdollistaa Javan kerran kirjoitettava, missä tahansa suoritettava siirrettävyys.

Mitä JVM sisältää Java?
Java Virtuaalikone (JVM) on moottori, joka tarjoaa ajonaikaisen ympäristön ajamiseen Java koodia tai sovelluksia. Se muuntaa Java tavukoodi konekieleksi. JVM on osa Java Ajonaikainen ympäristö (JRE). Muissa ohjelmointikielissä kääntäjä tuottaa konekoodia tietylle järjestelmälle. Kuitenkin Java kääntäjä tuottaa koodia virtuaalikoneelle, joka tunnetaan nimellä Java Virtuaalikone.
Miten JVM toimii?
Ensimmäinen, Java koodi käännetään tavukoodiksi. Tämä tavukoodi tulkitaan eri koneilla. Isäntäjärjestelmän ja Java lähdekoodi, tavukoodi on välittäjäkieli. JVM Java on vastuussa muistitilan varaamisesta.
Työskentely Java Virtuaalikone (JVM)
ArchiJVM:n rakenne (Java Virtuaalikone)
Ymmärretäänpä nyt JVM:n arkkitehtuuri. JVM-arkkitehtuuri Java sisältää luokkalataajan, muistialueen, suoritusmoottorin ja paljon muuta.
Java Virtuaalikone Archirakenne
1) ClassLoader
Luokanlataaja on alijärjestelmä, jota käytetään luokkatiedostojen lataamiseen. Se suorittaa kolme päätoimintoa: lataamisen, linkittämisen ja alustuksen.
2) Menetelmäalue
JVM-metodialue tallentaa luokkarakenteita, kuten metatietoja, vakion ajonaikaisen poolin ja metodien koodin.
3) Kasa
Kaikki Esineet, niihin liittyvät ilmentymämuuttujat ja taulukot tallennetaan kasaan. Tämä muisti on yleinen ja jaettu useille säikeille.
4) JVM-kielipinot
Java Kielipinot tallentavat paikallisia muuttujia ja niiden osittaisia tuloksia. Jokaisella säikeellä on oma JVM-pino, joka luodaan samanaikaisesti säikeen luomisen kanssa. Uusi kehys luodaan aina, kun metodia kutsutaan, ja se poistetaan, kun metodin kutsumisprosessi on valmis.
5) PC-rekisterit
PC-rekisteri tallentaa osoitteen Java virtuaalikoneen käsky, jota parhaillaan suoritetaan. Java, jokaisella säikeellä on oma erillinen PC-rekisterinsä.
6) Alkuperäiset menetelmäpinot
Natiivimenetelmäpinot sisältävät natiivikoodin ohjeet, jotka ovat riippuvaisia natiivista kirjastosta. Se on kirjoitettu toisella kielellä natiivin koodin sijaan. Java.
7) Suoritusmoottori
Suoritusmoottori lukee tavukoodin ja suorittaa sen pala palalta. Se käyttää tulkkia ja Just-In-Time (JIT) -kääntäjää tavukoodin muuntamiseen natiiviksi konekieliseksi koodiksi ja sen suorittamiseen.
8) Natiivimenetelmärajapinta
Native Method Interface on ohjelmointikehys. Se sallii Java JVM:ssä suoritettava koodi, jota käytetään natiivien sovellusten ja kirjastojen kutsumiseen ja jonka kautta ne voivat kutsua sitä.
9) Native Method Libraries
Native Libraries on kokoelma natiiveja kirjastoja (C, C++), joita Execution Engine tarvitsee.
Tuotteemme Code Käännös- ja toteutusprosessi
Ohjelmisto-ohjelman kirjoittamiseen ja suorittamiseen tarvitset seuraavat:
- 1) Toimittaja – Kirjoittaaksesi ohjelmasi; tähän voi käyttää muistikirjaa.
- 2) kääntäjä – Muuntaaksesi korkean tason kieliohjelmasi natiiviksi konekieleksi.
- 3) Linkkeri – Yhdistääksesi pääohjelmasi eri ohjelmatiedostoviittaukset.
- 4) Kuormaaja – Lataa tiedostot toissijaiselta tallennuslaitteeltasi, kuten kiintolevyltä, flash-asemalta tai CD-levyltä, RAM-muistiin suoritusta varten. Lataus tapahtuu automaattisesti, kun suoritat koodisi.
- 5) Toteutus – Koodin varsinainen suorittaminen, jonka hoitavat käyttöjärjestelmäsi ja prosessorisi.
Tämän taustan pohjalta katso seuraava video ja opi JVM:n sisäinen toiminta ja arkkitehtuuri (Java Virtuaalikone).
Napauta täältä jos video ei ole saatavilla
C-koodin käännös- ja suoritusprosessi
Ymmärtää Java Käännösprosessia tarkastelemme ensin lyhyesti C:n käännös- ja linkitysprosessia.
Oletetaan, että pääfunktiossa on kutsuttu kahta funktiota, f1 ja f2. Pääfunktio on tallennettu tiedostoon a1.c.
Funktio f1 tallennetaan tiedostoon a2.c.
Funktio f2 tallennetaan tiedostoon a3.c.
Kaikki nämä tiedostot, eli a1.c, a2.c ja a3.c, syötetään kääntäjälle, jonka tulosteena ovat vastaavat objektitiedostot eli konekoodi.
Seuraava vaihe on kaikkien näiden objektitiedostojen integrointi yhdeksi .exe-tiedostoksi linkittimen avulla. Linkitin yhdistää kaikki nämä tiedostot ja luo .exe-tiedoston.
Ohjelman suorituksen aikana latausohjelma lataa .exe-tiedoston RAM teloitusta varten.
Java koodin kokoaminen ja suorittaminen sisään Java VM
Katsotaanpa nyt prosessia, jossa JavaPääasiassa sinulla on kaksi metodia, f1 ja f2.
- Päämetodi tallennetaan tiedostoon a1.java
- f1 on tallennettu tiedostoon nimellä a2.java
- f2 on tallennettu tiedostoon nimellä a3.java
Kääntäjä kääntää kolme tiedostoa ja tuottaa kolme vastaavaa .class-tiedostoa, jotka koostuvat BYTE-koodista. Toisin kuin C:ssä, linkitystä ei tehdä.
Java VM tai Java Virtuaalikone sijaitsee RAM-muistissa. Suorituksen aikana luokkatiedostot tuodaan RAM-muistiin luokkalataajan avulla. BYTE-koodi tarkistetaan mahdollisten tietoturvaloukkausten varalta.
Seuraavaksi suoritusmoottori muuntaa tavukoodin natiiviksi konekieliseksi koodiksi. Tämä on just-in-time-kääntämistä. Se on yksi tärkeimmistä syistä, miksi Java on verrattain hidas.
HUOMAUTUS: JIT eli Just-in-time-kääntäjä on osa Java Virtuaalikone (JVM). Se tulkitsee tavukoodin osia, joilla on samankaltainen toiminnallisuus samanaikaisesti.
Mikä tekee Java sekä tulkittu että käännetty kieli?
Ohjelmointikielet luokitellaan seuraavasti:
- Korkeamman tason kieli, esim. C++, Java
- Keskitason kielet, esim. C
- Matalan tason kieli, esim. Assembly
- Lopuksi alin taso konekielenä
A kääntäjä on ohjelma, joka muuntaa ohjelman kielitasolta toiselle. Esimerkiksi kielitason muuntaminen C++ ohjelmoida konekielelle. Java kääntäjä muuntaa korkean tason Java koodi tavukoodiksi (joka on myös eräänlainen konekoodi).
An tulkki on ohjelma, joka muuntaa yhdellä ohjelmointikielen tasolla olevan ohjelman toiselle ohjelmointikielelle. samalla tasollaEsimerkiksi muuntaminen Java ohjelma sisään C++.
In Java, Just-In-Time-koodigeneraattori muuntaa tavukoodin natiiviksi konekoodiksi, jotka ovat samoilla ohjelmointitasoilla. Näin ollen, Java on sekä käännetty että tulkittu kieli.
Mikä tekee Java hidas?
Kaksi pääasiallista syytä hitaus Java ovat:
- Dynaaminen linkitys: Toisin kuin C, linkitys tehdään ajon aikana, joka kerta, kun ohjelma ajetaan Java.
- Ajonaikainen tulkki: Tavukoodin muuntaminen alkuperäiseksi konekoodiksi tapahtuu ajon aikana Java, mikä hidastaa nopeutta entisestään.
Kuitenkin uusimmat versiot Java ovat ratkaisseet nämä suorituskyvyn pullonkaulat pitkälti.











