Java bytecode

Koma talîmatên Java virtual machinê ku ji bo şuxilandina programên Java û ên dî ên JVMê hewce ne.

Java bytecode koma talîmatan Java virtual machinê (JVM) ye, ji bo şuxilandina programên ko bi Javayê û zimanên dî yên JVMê hewce ye.[1] Her operasyona bytecodê di JVMê de bi yek baytî tê şanîkirin, sebeba navê "bytecode" (koda baytan), û ew dike ku ev bibe formeke piçûk ji bo talîmatan.[2] Ev forma "di neqebêna wê de" dike ku programên Javayê karibin netêkildarî platformê bin, ji ber ku nayêne kompîlekirinî qoda natîv ya mekînê lê têne kompîlekirinî formateke ko li her derî kare were şuxilandin di neqeba împlementasyonên JVMê ên biferq.

JVM wê bytecodê dixwînê yan jî di-cih-de dixe qoda natîv ya mekînê bi kompîlereke Just-In-Timê (JIT), û bi wî şiklî performansa programên Javayê pêş de dixe.Dîzayna Java bytecodê dereceke bilind ya netêkildariya platformê (cross-platform) û emîniyetê dike hedef, û program di cihê JVMê yê kontrolkirî de têne şuxilandin.[3] Bêhtirê caran programkerên Javayê destê xwe nadine bytecodê, lê heke yek ji şiklê wê fêm bike ew kare ji yekî re bibe arîkar wextê ko yek bikeve pey xeletiyên programan yan jî bixwaze wana zûtir bike.

Têkilî bi Javayê re biguhêre

Heya programkerên Javayê ne hewce ji bytecodê hebe û hîç ne hewce ne fêm bikin jî. Lê, wek ku di kovara IBMê ya developerWorks de hatiye gotin, "Ku yek bytecode fêm bike û zanibe bê çi bytecode ji kompîlera Javayê were çêkirin ew eynî bi şiklê ko heya assemblyê arî programkerên C û C++ê dike arî yekî dike".[4]

Pêşpirtik/paşpirtik Çeşîdê operandê
i integer
l long
s short
b byte
c character
f float
d double
a reference

Ji bo nimûne, iadd wê du integeran (reqemên tevahî) lev zêde ke, û dadd wê du doublan lev zêde ke. Talîmatên con, load, bi varyantên ku bi _n re xilas dibin jî hene, ku n reqemek e, ji bo load û store ji 0 heta 3 ye û ji bo constn li gora çeşîdî tê guhertin.

Li vê qoda Javayê meyzênin:

outer:
for (int i = 2; i < 1000; i++) {
    for (int j = 2; j < i; j++) {
        if (i % j == 0)
            continue outer;
    }
    System.out.println (i);
}

Kompîlereke Javayê kare qoda banî tercime bike vê bytecodê, heke ew qod di nav metodek/funksiyonekê de bane:

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       31
16:  iload_1
17:  iload_2
18:  irem
19:  ifne    25
22:  goto    38
25:  iinc    2, 1
28:  goto    11
31:  getstatic       #84; // Field java/lang/System.out:Ljava/io/PrintStream;
34:  iload_1
35:  invokevirtual   #85; // Method java/io/PrintStream.println:(I)V
38:  iinc    1, 1
41:  goto    2
44:  return

Jenerasyon biguhêre

Zimanê herî zêde ko Java virtual machinê dikê hedef Java ye. Di serî de tenê yek kompîler hebû, kompîlera javac ji Sun Microsystems, ku qoda çavkaniyê ya Javayê ji Java kompîle dikir Java bytecode; lê ji ber ku hemû taybetmendiyên ji bo bytecode ya Java niha li ber destan in, kom/kesên dî jî kompîlerên ko Java bytecodê çêdikin çêkirine. Nimûnên kompîlerên dî:

  • Eclipse compiler for Java (ECJ)
  • Jikes (ji IBMê hatiye çêkirin, bi C++ê (en))
  • Espresso (Tenê Java 1.0)
  • GNU Compiler for Java (en) (GCJ), ji Java kompîle dike Java bytecodê û ew kare kompîle bike qoda natîv ya mekînê jî. Heta versiyona 6a perçekek ji GNU Compiler Collection (en) (GCC) bû.

Çavkanî biguhêre

  1. ^ "Java Virtual Machine Specification". Oracle. Roja gihiştinê 14 çiriya paşîn 2023.
  2. ^ Lindholm, Tim (2015). The Java Virtual Machine Specification. Oracle. ISBN 978-0133905908.
  3. ^ Arnold, Ken (1996). "The Java Programming Language". Sun Microsystems. 1 (1): 30–40.
  4. ^ "IBM Developer". developer.ibm.com. Roja gihiştinê 20 sibat 2006.