JVM - Kas yra „Java“ virtualioji mašina & jo architektūra

Kas yra JVM?

„Java Virtual Machine“ (JVM) yra variklis, užtikrinantis vykdymo aplinką „Java“ kodui ar programoms valdyti. Jis konvertuoja „Java“ baitkodą į mašinų kalbą. JVM yra „Java Run Environment“ (JRE) dalis. Kitomis programavimo kalbomis kompiliatorius gamina mašininį kodą tam tikrai sistemai. Tačiau „Java“ kompiliatorius sukuria kodą virtualiajai mašinai, vadinamai „Java“ virtualia mašina.

Štai kaip veikia JVM

Pirma, „Java“ kodas yra suderinamas su baitų kodu. Šis baitų kodas interpretuojamas skirtingose ​​mašinose

Tarp pagrindinės sistemos ir „Java“ šaltinio „Bytecode“ yra tarpinė kalba.

„Java“ JVM yra atsakingas už atminties paskirstymą.

„Java“ virtualiosios mašinos (JVM) darbas

Šioje JVM pamokoje sužinosite

  • JVM architektūra
  • Programinės įrangos kodo sudarymo ir vykdymo procesas
  • C kodo sudarymo ir vykdymo procesas
  • Java kodo kompiliavimo ir vykdymo procesas
  • Kodėl „Java“ yra aiškinama ir kompiliuojama kalba?
  • Kodėl Java lėta?

JVM architektūra

Dabar šioje JVM pamokoje supraskime JVM architektūrą. JVM architektūroje „Java“ yra „classloader“, atminties sritis, vykdymo variklis ir kt.
„Java“ virtualiosios mašinos architektūra

1) „ClassLoader“

Klasės krautuvas yra posistemis, naudojamas klasės failams įkelti. Ji atlieka tris pagrindines funkcijas, t. Įkeliama, susiejama ir inicijuojama.

2) Metodo sritis

JVM metodų srityje saugomos klasės struktūros, tokios kaip metaduomenys, pastovus vykdymo laikas ir metodų kodas.

3) krūva

Visi objektai, su jais susiję egzempliorių kintamieji ir masyvai saugomi kaupe. Ši atmintis yra bendra ir bendrinama keliose gijose.

4) JVM kalbos kaminai

„Java“ kalbos kaupiniuose saugomi vietiniai kintamieji ir tai yra daliniai rezultatai. Kiekviena gija turi savo JVM kaminą, sukurtą tuo pačiu metu, kai sukuriama gija. Naujas rėmelis kuriamas, kai yra iškviečiamas metodas, ir jis pašalinamas, kai metodo iškvietimo procesas yra baigtas.

5) kompiuterio registrai

Kompiuterių registras saugo šiuo metu vykdomos „Java“ virtualiosios mašinos instrukcijos adresą. „Java“ programoje kiekviena gija turi atskirą kompiuterio registrą.

6) Gimtojo metodo kaupimas

Gimtojo metodo krūvelėse laikoma gimtojo kodo instrukcija, priklausanti nuo gimtosios bibliotekos. Jis parašytas ne Java, o kita kalba.

7) vykdymo variklis

Tai programinės įrangos tipas, naudojamas aparatinei įrangai, programinei įrangai ar visoms sistemoms išbandyti. Bandymo vykdymo variklis niekada nepateikia jokios informacijos apie išbandytą produktą.

8) Gimtojo metodo sąsaja

„Native Method Interface“ yra programavimo sistema. Tai leidžia „Java“ kodui, kuris veikia JVM, skambinti bibliotekomis ir vietinėmis programomis.

9) Vietinių metodų bibliotekos

Gimtosios bibliotekos yra vietinių bibliotekų (C, C ++) rinkinys, reikalingas vykdymo varikliui.

Programinės įrangos kodo sudarymo ir vykdymo procesas

Norint parašyti ir vykdyti programinę įrangą, jums reikia:

1) Redaktorius - norint įvesti savo programą, tam galima naudoti bloknotą

2) Kompiliatorius - konvertuoti savo aukštos kalbos programą į gimtąjį mašinos kodą

3) „Linker“ - norėdami sujungti skirtingas programos failų nuorodas pagrindinėje programoje.

4) Krautuvas - failams iš savo antrinio atminties įrenginio, pvz., Kietojo disko, „Flash“ disko, kompaktinio disko, įkelti į RAM, kad jie būtų vykdomi. Įkėlimas atliekamas automatiškai, kai vykdote kodą.

5) Vykdymas - faktinis kodo vykdymas, kurį tvarko jūsų OS ir procesorius.

Atsižvelgdami į tai, peržiūrėkite šį vaizdo įrašą ir sužinokite apie JVM vidinį darbą ir JVM („Java Virtual Machine“) architektūrą.

Spustelėkite čia, jei vaizdo įrašas nepasiekiamas

C kodo sudarymo ir vykdymo procesas

Suprasti „Java“ kompiliavimo procesą „Java“. Pirmiausia pažvelkime į C sukūrimo ir susiejimo procesą.

Tarkime, kad pagrindinėje byloje jūs iškvietėte dvi funkcijas f1 ir f2. Pagrindinė funkcija saugoma faile a1.c.

Funkcija f1 saugoma faile a2.c

Funkcija f2 saugoma faile a3.c

Visi šie failai, ty a1.c, a2.c ir a3.c, perduodami kompiliatoriui. Kieno išvestis yra atitinkami objekto failai, kurie yra mašinos kodas.

Kitas žingsnis yra visų šių objektų failų integravimas į vieną .exe failą naudojant nuorodą. Susiejiklis sujungs visus šiuos failus ir sukuria .exe failą.

Vykdant programą, krautuvo programa įkelia a.exe į RAM.

„Java“ kodo kompiliavimas ir vykdymas „Java VM“

Dabar šiame JVM vadovėlyje pažvelkime į JAVA procesą. Pagrinde turite du metodus f1 ir f2.

  • Pagrindinis metodas saugomas faile a1.java
  • f1 faile saugomas kaip a2.java
  • f2 faile saugomas kaip a3.java

Kompiliatorius sukompiliuos tris failus ir pagamins 3 atitinkamus .class failus, kuriuos sudaro BYTE kodas. Skirtingai nei C, susiejimas neatliekamas .

„Java VM“ arba „Java Virtual Machine“ yra RAM. Vykdant, naudojant klasės krautuvą, klasės failai perkeliami į RAM. BYTE kodas patikrinamas dėl bet kokių saugumo pažeidimų.

Tada vykdymo variklis pavers „Bytecode“ į „Native Machine“ kodą. Tai yra laiku surinkti. Tai yra viena iš pagrindinių priežasčių, kodėl „Java“ yra palyginti lėta.

PASTABA: JIT arba „Just-in-time“ kompiliatorius yra „Java“ virtualiosios mašinos (JVM) dalis. Tai aiškina dalį baitų kodo, kuris tuo pačiu metu turi panašią funkciją.

Kodėl „Java“ yra tiek aiškinama, tiek kompiliuota kalba?

Programavimo kalbos skirstomos į
  • Aukštesnio lygio kalbos egz. „C ++“, „Java“
  • Vidutinio lygio kalbos, pvz. C
  • Žemo lygio kalbų egzaminas
  • pagaliau žemiausias mašininės kalbos lygis.

Kompiliatorius yra programa, kuri konvertuoja programą iš vieno lygio kalbos į kitą. C ++ programos konversijos į mašininį kodą pavyzdys.

„Java“ kompiliatorius konvertuoja aukšto lygio „Java“ kodą į baitų kodą (kuris taip pat yra mašininio kodo tipas).

Vertėjas yra programa, kuri konvertuoja programą vieno lygio į kitą programavimo kalba tuo pačiu lygiu. „Java“ programos konversijos į C ++ pavyzdys

„Java“ sistemoje „Just In Time Code“ generatorius konvertuoja baitą į gimtąjį mašinos kodą, kuris yra tame pačiame programavimo lygyje.

Taigi „Java“ yra sudaroma ir aiškinama kalba.

Kodėl Java lėta?

Dvi pagrindinės „Java“ lėtumo priežastys yra

  1. Dinaminis susiejimas: skirtingai nei C, susiejimas atliekamas vykdymo metu, kiekvieną kartą, kai programa vykdoma „Java“.
  2. „Run-time Interpreter“: baito kodo pavertimas į vietinį kompiuterio kodą atliekamas „Java“ vykdymo metu, o tai dar labiau lėtina greitį.

Tačiau naujausia „Java“ versija iš esmės pašalino našumo trūkumus.

Santrauka :

  • Pilna JVM forma yra „Java“ virtuali mašina. JVM „Java“ yra variklis, valdantis „Java“ kodą. Jis konvertuoja „Java“ baitkodą į mašinų kalbą.
  • JVM architektūroje „Java“ yra „classloader“, atminties sritis, vykdymo variklis ir kt.
  • JVM programoje „Java“ kodas sudaromas pagal baitą. Šis baitų kodas interpretuojamas skirtingose ​​mašinose
  • JIT reiškia „Just-in-time“ kompiliatorių. JIT yra „Java“ virtualiosios mašinos (JVM) dalis. Jis naudojamas pagreitinti vykdymo laiką
  • Palyginti su kitomis kompiliatorių mašinomis, „Java“ JVM gali būti vykdomas lėtai.

Įdomios straipsniai...