Java-tavukoodi on joukko ohjeita , jotka Java Virtual Machine suorittaa . Jokainen tavukoodin käyttökoodi on yksi tavu; kaikkia 256 mahdollista opkoodiarvoa ei käytetä, niistä 51 on varattu tulevaa käyttöä varten.
Java- tai muilla JVM -yhteensopivilla kielillä ohjelmoinnissa ei tarvita tavukoodin ominaisuuksien tuntemusta, mutta ”tavukoodin ymmärtäminen ja Java-kääntäjän luomismekanismien ymmärtäminen auttaa Java-ohjelmoijaa samalla tavalla kuin kokoonpanon tuntemus. kieli auttaa ohjelmoijaa kirjoittamalla C- tai C++ -kielellä » [1] [2] .
Koodi CA 16 on varattu debuggerin käyttöön, eikä kieli käytä sitä, samoin kuin koodit FE16 ja FF16 , jotka on varattu virtuaalikoneen ja virheenkorjaajien käyttöön. Alueen CB 16 - FD 16 koodeja ei käytetä JVM:n nykyisessä versiossa, ja ne on varattu tulevia lisäyksiä varten.
Ohjeet voidaan jakaa useisiin ryhmiin:
On myös muutamia ohjeita, jotka suorittavat tiettyjä tehtäviä, kuten poikkeuksia, synkronointia ja niin edelleen.
Monissa ohjeissa on etuliitteitä tai jälkiliitteitä, jotka vastaavat niiden operandeja:
etuliite tai pääte | operandityyppi |
---|---|
I | kokonaisluku |
L | pitkä |
S | lyhyt |
B | tavu |
C | merkki |
F | kellua |
D | kaksinkertainen |
A | viite |
Esimerkiksi operaatio IADD on kahden kokonaisluvun yhteenlasku, kun taas FADD on liukulukujen summaus.
Koodi Java-kielellä :
ulkoinen : for ( int i = 2 ; i < 1000 ; i ++ ) { for ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) jatka ulompaa ; } Järjestelmä . ulos . println ( i ); }kääntäjä voi kääntää seuraavaksi tavukoodiksi:
0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 44 9: iconst_2 10: istore_2 11: iload_2 12: iload_1 13: if_icmpge 13 : if_icmpge 31_16 : 2ne :5: 9 iload_16 : 2ne : 5 :i 31_16 : 2ne 25: iinc 2 , 1 28: goto 11 31: getstatic #84 ; //Kenttä java/lang/System.out:Ljava/io/PrintStream; 34: iload_1 35: invokevirtual #85 ; //Menetelmä java/io/PrintStream.println:(I)V 38: iinc 1 , 1 41: goto 2 44: returnUseimmissa tapauksissa Java-tavukoodi luodaan suoritettaviksi Java- virtuaalikoneessa Java- lähdekoodista . Ainoa natiivi kääntäjä, joka muuntaa Java-koodin Java-tavukoodiksi, on Javac , jonka on luonut Sun Microsystems . Mutta koska kaikki Java-tavukoodimääritykset ovat saatavilla, on olemassa kolmannen osapuolen kääntäjiä, jotka luovat tämän tavukoodin. Esimerkkejä tällaisista kääntäjistä:
Joissakin projekteissa on kääntäjiä, joiden avulla voit luoda tavukoodin JVM:lle toisen ohjelmointikielen lähdekoodista. Tällaisia projekteja ovat mm.
Suurin osa olemassa olevista JVM-käskyistä on kirjoitettu staattisesti : menetelmän allekirjoitukset niiden kutsupaikoissa tarkistetaan käännösvaiheessa, mutta ei ole mekanismia tämän tarkistuksen siirtämiseksi ajonaikaiseen [3] . JVM:lle on kuitenkin otettu käyttöön useita dynaamisesti kirjoitettuja kieliä .