Here naverokê

Java bytecode

Ji Wîkîpediya, ensîklopediya azad.

Java bytecode (bytecoda Javayê) koma talîmatên Java virtual machinê (JVM) ye ku ji bo şuxilandina programên ko bi Javayê û zimanên dî yên JVMê hewce ne.[1] Her emelê 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ê de" dike ku programên Javayê karibin negirêdayî 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îne 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ê bi pêş dixe. Dîzayna Java bytecodê dereceke bilind ya negirêdayîbûna platformê (cross-platform) û emniyetê 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 wan zûtir bike.

Eleqe bi Javayê re

[biguhêre | çavkaniyê biguhêre]

Heya programkerên Javayê ne hewce ji bytecodê hebe û ne hewce ye 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

Mesela, iadd du "integer"-an (reqemên sihê/tevahî) li hev zêde dike, û dadd du "double"-yan li hev zêde dike. Talîmatên con, load, bi varyantên ku bi _n re xilas dibin jî hene, reqemek dikeve dewsa n. 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

Zimanê ko herî zêde Java virtual machinê dike hedef Java ye. Di serî de tenê yek kompîler hebû, kompîlera javacê ya ji Sun Microsystemsê, ku qoda çavkaniyê ya Javayê ji Java kompîle dikir Java bytecode; lê ji ber ku hemû xasiyetên ji bo bytecodeya 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û.
  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.