Mis vahe on JVM-il ja JIT-i kompilaatoril (just ajas kompilaatoril) Java?


Vastus 1:

JVM-il (“Java virtuaalne masin”) on kaks tähendust:

  1. See on abstraktne juhistekomplekt, mis on loodud Java-programmide käivitamiseks. See juhiskomplekt määratleb suhteliselt sirgjoonelise rippmenüü, kuhu Java lähteprogrammid kompileeritakse; need juhised salvestatakse “.class” failidesse. See on programm, mis töötab reaalses arvutis, kui see suudab täita abstraktseid JVM-i juhiseid. Selline JVM sisaldab „tõlki” üksikute JVM-i juhiste jaoks, kuid hõlmab ka kõiki Java-koodi täitmise toetamiseks vajalikke tugimasinaid, sealhulgas aritmeetikat, funktsioonikõnesid, salvestusruumi eraldamist, prügivedu, niidi ajastamist, klassifailide laadureid, faile I / O ja muu juurdepääs kohalikule opsüsteemile vastavalt vajadusele keerukate Java-rakenduste käitamiseks.

Vanemad JVM-id tõlgendasid JVM-i käske sõna otseses mõttes käitusel ükshaaval. Seda on lihtne rakendada, mistõttu see ka tehti. Kuid nagu iga tõlk, annab selline käitustõlgendus programmi täitmisajad, mis on tavaliselt suurusjärgus aeglasemad kui natiivse kompileeritud masinkoodi puhul.

JIT-kompilaator (JITter) on moodsaimate JVM-ide funktsioon, mis kompileerib JVM-i juhendite tükid natiivseks masinkoodiks uute tükkidena või täitmise ajal ilmnevad JVM-koodiga varem kokku puutunud tükid. Selleks võiks kasutada võrguühenduseta Java-natiiv-koodi kompilaatorit (mõned on tegelikult olemas) selleks, et pakkuda traditsioonilisi pakkide koostamise eesmärke, kuid Java-maailm ei läinud nii.

JITtersil on pakettkompilaatoritega võrreldes üks eelis: nad suudavad kompileerida koodi, mis vastab käitusel toimuvale, ja aitab sel viisil Java-koodi dünaamilisi omadusi optimeerida, näiteks dünaamilist saatmist, mis toimub ülekoormatud Java-meetodi kõnede puhul. Neil on puudus: nad ei näe programmi suures mahus ega saa üldiselt teha seda, mida head pakkide kompilaatorid hästi teevad: globaalseid optimeerimisi. Kompromiss tähendab praktikas JIT-i kompileeritud Java-programme, mis töötavad üsna hästi, kuid mitte nii kiiresti kui traditsiooniliste meetoditega kompileeritud C- või C ++-programmid.


Vastus 2:

Täpselt õigel ajal koostaja ehk JIT on Java Virtuaalmasina lahutamatu komponent koos prügikogumisega, mis nagu nimigi ütleb, teeb just õigel ajal kompileerimise. See suudab Java-koodi kompileerida otse masinakeelde, mis võib Java-rakenduste jõudlust märkimisväärselt parandada.

Muide, pole garanteeritud, et mis kood ja millal kompileeritakse. JIT kompileerib kuuma koodi tavaliselt leviala JVM-is, kui selle täitmine ületab teatud piiri, nt teisendatakse meetod masinakeelseks, kui seda kutsutakse rohkem kui 10K korda jne.

Siin on veel mõned erinevused Java programmeerimisplatvormi JVM ja JIT vahel:

1) Peamine erinevus JVMi ja JITi vahel on otstarbekas, JVMi peamine eesmärk on pakkuda platvormi sõltumatust, samal ajal kui JITi eesmärk on parandada JVMi jõudlust, kompileerides rohkem koode masinakeelde. Pidage ainult meeles, et ka see kompileerimine võtab aega, nii et kogu koodi omakeelseks koodiks tõlkimine pole seda väärt. Seetõttu komponeerib JIT enamasti sagedamini kasutatavat koodi emakeelseks koodiks.

2) Veel üks erinevus JITi ja JVMi vahel on see, et JIT on osa JVMist. Üks näide JIT-ist on Oracle Hotspot JIT, mis on kaasas Hotspot JVM-iga. Seda nimetatakse hotpostiks, kuna selle just õigel ajal kompilaator kompileerib emakeeles ainult kuuma koodi, mis täidab 90% ajast.

Künnise seadistamine toimub juhul, kui mõni kood täidab rohkem kui see lävi, siis on see kõlblik õigeks ajaks kompileerimiseks. Muide, Hotspot pole ainus JVM, mis sisaldab just ajakompilaatorit, on ka teisi JVM-e, nt Oracle'i algne JRockit.

3) Lõpuks on JVM vanem mõiste kui JIT. JIT leiutas tegelikult JVM-i jõudluse parandamiseks pärast aastatepikkust Java esmakordset väljaandmist, samal ajal kui Java virtuaalmasin oli Java esmase väljalaske osa.

See kõik on Java JVMi ja JITi erinevus. Nagu ma ütlesin, on JIT JVM-i osa ja seda kasutatakse JVM-i jõudluse parandamiseks, tehes Java baitkoodid dünaamiliselt kompileerides või tõlkides emakeelsesse masinakeelsesse koodi täitmise ajal.


Vastus 3:

Peamine erinevus on järgmine:

  • JVM on Java virtuaalne masin, samas kui JIT on kompileerimine Just In Time.JIT on JVM alamhulk, mida kasutatakse JVM jõudluse parandamiseks. JVM-i kasutatakse Java-programmide baitkoodi täitmiseks, mis muudab Java-platvormi sõltumatuks, samas kui JIT kompileerib praegu täidesaatvat baiti kood masinakeelde. JVM-i paremaks toimimiseks salvestab JIT ka selle kompileeritud koodi.

Aitäh ja parimate soovidega

shujat khaan

kontaktandmed: [email protected]