User:Taskukaru/Java baitkood

Java baitkoodiks nimetatakse masinkoodi, mida täidab Java virtuaalmasin (inglise keeles Java Virtual Machine).

Spetsifikatsioon
Java virtuaalmasin kasutab enda töös nii pinusid kui ka registreid. Virtuaalmasina iga kaader koosneb ajutiste muutujate pinust ja lokaalsete muutujate massiivist. Ajutiste muutujate pinu kasutatakse vahetult arvutuste ja virtuaalmasina käskude jaoks vajaminevate muutujate ning virtuaalmasina käskude tulemuste hoidmiseks. Lokaalsete muutujate massiivi kasutatakse muutujate väärtuste pikemaks salvestamiseks. Pinu ja massiivi suurus määratletakse kompilaatori poolt igale meetodikutsele eraldi, kuid maksimaalselt võib kumbki mälustruktuur hoida endas 65535 erinevat 32-bitilist väärtust. See tähendab, et 64-bitiste tüüpide  ja   salvestamiseks tuleb kasutada pinus või massiivis kahte järjestikust pesa.

Instruktsioonid
Iga baitkoodi instruktsioon koosneb ühe baidi pikkusest operatsioonikoodist, millele vajaduse korral järgnevad mitme baidi suurused väärtused operandide jaoks. Instruktsioonide lihtsamaks jälgimiseks on loodud igale operatsioonikoodi baidile mnemooniline vaste, mis võimaldab masinkoodi lugeda ilma täpseid operatsioonide baidilisi väärtuseid teadmata.

Instruktsioonid jagunevad laialdaselt järgmisteks gruppideks:


 * Väärtuste ajutiste muutujate pinusse laadimine ja salvestamine (nt,  ).
 * Artimeetika ja loogika-avaldiste instruktsioonid (nt,  ).
 * Tüübiteisendused (nt,  ).
 * Objektide loomine ja nende käsitlemine (nt,  ).
 * Ajutiste muutujate pinu manipuleerimine (nt,  ).
 * Kontrollkäsud (nt,  ).
 * Meetodite väljakutsed.

Samuti on olemas mõned instruktsioonid spetsiifilisemate tegevuste jaoks, nt sünkroniseerimine ja erindite viskamine.

Paljud instruktsioonid omavad ees- või järelliidet, mis määrab, missugust tüüpi väärtuseid instruktsioon kasutab. Kõik liited on välja toodud järgnevas tabelis: Näiteks  liidab ajutiste muutujate pinu kaks ülemist täisarvu,   aga kaks  -tüüpi väärtust. Lisaks on olemas eraldi instruktsioonid  ja , kus n on täisarv 0st 3ni, ning  , mis võimaldavad efektiivsemalt käsitleda väiksemaid konstantväärtuseid.

Näide
Olgu meil järgnev Java programmi kood. Java kompilaator võib eelneva koodi teisendada Java virtuaalmasina jaoks järgnevaks baitkoodiks, eeldades, et antud kood sisaldub mingis meetodis.

Viited
__NOINDEX__