close

Java-tavukoodi

Siirry navigointiin Siirry hakuun

Java - tavukoodi löytyy tiedoston sisällä .class-tunnisteella ja se on ohjetyyppi, jonka Java-virtuaalikone (JVM) odottaa saavansa, jotta se voidaan myöhemmin kääntää konekielelle JIT - kääntäjän avulla . teloitus. Se on yleensä tulosta Java - ohjelmointikielen kääntäjästä (kuten javac), mutta se voidaan luoda muista kääntäjistä.

Rakenne

Jokaisen käskyn toimintakoodi on yhden tavun mittainen, vaikka jotkut vaativat parametreja, jotka johtavat monitavuisiin käskyihin. Kaikkia 256 mahdollista toimintakoodia ei käytetä. Itse asiassa Sun Microsystems , Java-alustan alkuperäinen luoja, on jakanut kolme arvoa pysyäkseen pysyvästi toteuttamatta. [ 1 ]

Ohjeet jakautuvat seuraaviin luokkiin:

  • Siirry muistista rekistereihin ja päinvastoin (esim. aload_0, istore)
  • Aritmetiikka ja logiikka (esim. ladd, fcmpl)
  • Tyyppimuunnos (esim. i2b, d2i)
  • Objektien luominen ja käsittely (esim. uusi, putfield)
  • Operandipinon manipulointi (esim. swap, dup2)
  • Virtauksen ohjaus (esim. ifeq, goto)
  • Menetelmien kutsuminen ja palautus (esim. invokespecial, areturn)

Siellä on myös muutamia ohjeita erikoistuneempiin toimintoihin, kuten poikkeusten käsittelyyn , synkronointiin jne.

Java-tavukoodityyli on analoginen pinosuuntautuneen ohjelmointikielen tyyliin . Esimerkiksi kokoonpanokoodi kahden rekisterin lisäämiseksi ja tuloksen siirtämiseksi kolmanteen x86 -perheen CPU :lle näyttää tältä:

 lisää  eax ,  edx 
 mov  ecx ,  eax

kun taas vertailukelpoinen koodi Java - kokoonpanokielellä näyttäisi tältä:

iload_1
iload_2
iadd
istore_3

Kaksi lisättävää arvoa sijoitetaan pinoon, josta ne otetaan lisäyskäskyllä. Lisäyksen tulos työnnetään takaisin pinoon ja noudetaan viimeisellä käskyllä, joka siirtää sen rekisteriin.

Dynaamisten kielten käsittely

Java-virtuaalikone tarjoaa jonkin verran tukea dynaamisesti kirjoitettujen kielten käsittelyyn. Useimmat JVM-käskyt on kirjoitettu staattisesti siinä mielessä, että menetelmäkutsut tarkistavat "allekirjoituksensa" käännöshetkellä ilman mekanismia, joka viivyttää tätä päätöstä ajon aikana tai valitse suoritustapa. "lähetys" vaihtoehtoisen lähestymistavan mukaan. [ 2 ]

JSR 292 ( Dynaamisesti kirjoitettujen kielten tuki Java™-alustalla ) [ 3 ] sisältää uuden käskyn invokedynamic, joka mahdollistaa dynaamisesti kirjoitetun menetelmän kutsumisen. "Da Vinci-kone" on virtuaalikoneen prototyyppi, joka isännöi JVM-laajennuksia näiden kielien käsittelemiseksi. Samoin virallinen Java-virtuaalikone, sen versiosta 7 lähtien, sisältää myös opkoodin invokedynamic.

Viitteet

  1. VM Spec - Varatut käyttökoodit
  2. ^ Nutter, Charles (3. tammikuuta 2007). "InvokeDynamic: todella hyödyllinen?" . Haettu 25.1.2008 . 
  3. katso JSR 292