2012-08-04 15 views
15

Sono una newbee in Java Bytecode. Stavo capendo il bytecode attraverso alcuni esempi, ma sono rimasto bloccato in un esempio.
Queste sono le mie Java e file di bytecodeComportamento diverso di bytecode java

class SimpleAdd{ 
    public static void main(char args[]){ 
     int a,b,c,d; 
     a = 9; 
     b = 4; 
     c = 3; 
     d = a + b + c; 
     System.out.println(d); 
    } 
} 
Compiled from "SimpleAdd.java" 
class SimpleAdd extends java.lang.Object{ 
SimpleAdd(); 
    Code: 
    0: aload_0 
    1: invokespecial #1; //Method java/lang/Object."<init>":()V 
    4: return 

public static void main(char[]); 
    Code: 
    0: bipush 9 
    2: istore_1 
    3: iconst_4 
    4: istore_2 
    5: iconst_3 
    6: istore_3 
    7: iload_1 
    8: iload_2 
    9: iadd 
    10: iload_3 
    11: iadd 
    12: istore 4 
    14: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 
    17: iload 4 
    19: invokevirtual #3; //Method java/io/PrintStream.println:(I)V 
    22: return 

} 

Voglio solo sapere perché non v'è bipush 9 quando abbiamo l'istruzione a = 9
E in tutti gli altri casi non c'è iconst.

+3

'bipush 9' inserisce il numero intero letterale 9 nella pila. 'istore_1' memorizza quel valore nella variabile locale # 1. 'iconst_4' inserisce un letterale 4 nello stack, e lo fa in un byte contro due per il' bipush', ma ci sono solo 'iconst_1' attraverso' iconst_5' bytecodes - no 'iconst_9'. –

risposta

20

iconst può inviare valori costanti da -1 a 5. È un'istruzione a byte singolo.

bipush può inviare valori costanti tra -128 e 127. Si tratta di un'istruzione a due byte.

Per premere 9 non è possibile utilizzare iconst. Non c'è l'istruzione iconst_9.

0

non v'è alcuna istruzione iconst_9

6

iconst_n is defined for n from 0 to 5

Non c'è iconst_9, quindi bisogna usare l'equivalente (ma meno efficiente) bipush

+1

'iconst' supporta valori [da meno uno a cinque] (http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.iconst_i) ... – Holger

0

l'istruzione i_const unica gamma da 0 ~ 5, in modo da deve sputare l'istanza spingere e memorizzare

Problemi correlati