Java virtuaalmasinJava virtuaalmasin (inglise keeles Java Virtual Machine) on abstraktne masin, mis interpreteerib kompileeritud Java baitkoodi arvuti protsessorile arusaadavateks instruktsioonideks. Java virtuaalmasina puhul on tegemist abstraktsioonikihiga, mis võimaldab jooksutada Java baitkoodiks kompileeritud rakendusi riistvaraplatvormist sõltumata. Masin tagab, et baitkood valideeritakse ning täidetakse korrektselt. Levinuim Java virtuaalmasina implementatsioon on Oracle poolt hallatav HotSpot.[1] SpetsifikatsioonIga Java virtuaalmasina implementatsioon peab järgima Java virtuaalmasina spetsifikatsioone. Java virtuaalmasina spetsifikatsioon määratleb üldised nõuded virtuaalmasina implementatsioonidele, et tagada kõikide Java virtuaalmasinate toimimine standardiseeritud moel. Iga Java baitkoodiks kompileeritud rakendus peab olema võimeline jooksma sellises masinas, mis Java virtuaalmasina spetsifikatsioone implementeerib.[2] ArhitektuurTüübidJava virtuaalmasinas on kaks erinevat tüüpi: primitiivsed tüübid ning viitetüübid (reference types). Spetsifikatsioon defineerib 9 primitiivset tüüpi:
Viitetüübid jagunevad kolmeks: klassitüübid, massiivitüübid ja liidesetüübid (interface types). Nende tüüpide väärtused vastavad dünaamiliselt loodud klassi, massiivi või liidese tüübi instantsidele.[2] MälukasutusJava virtuaalmasin defineerib mitmeid mälustruktuure, mis on tarvilikud masina tööks. Mõningad struktuurid on globaalsed virtuaalmasina kontekstis ning mõned struktuurid on eraldi iga lõime jaoks. Java virtuaalmasin kasutab enda töös nii registreid kui ka pinusid.[2]
Klasside laadimineJava virtuaalmasina spetsifikatsioon kirjeldab detailselt Java klassifailide formaadi ning nende laadimise funktsionaalsust. Klassilaadija (class loader) peab olema suuteline tuvastama ja laadima korrektseid Java klassifaile.[2] Klassilaadija toimib klassi laadimisel järgmisi samme jälgides:
JIT kompilaatorTavaline virtuaalmasina töökäik näeb ette, et masin interpreteerib sisendiks antud Java baitkoodi instruktsioone, mis on aeglasem, kui platvormispetsiifilise masinkoodi jooksutamine. Selle probleemi lahendamiseks rakendab Java virtuaalmasin JIT (just in time) kompileerimismeetodit. JIT kompilaator võimaldab programmi käitamisajal teatud programmilõike teisendada masinkoodiks, et seeläbi tagada nende osade kiirem täitmine. Sellist kompleerimise meetodit rakendatakse programmi osade peal, mida kõige tihedamini jooksutatakse. JIT kompilaatori olemasolu parandab oluliselt Java virtuaalmasinas jooksvate rakenduste jõudlust.[2] Viited |