[英]Different behaviour of java bytecode
我是Java 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
}
我只是想知道當我們有a = 9指令時為什么會有bipush 9
在所有其他情況下,有iconst。
iconst
可以將常量值-1推到5.這是一個單字節指令。
bipush
可以在-128和127之間推動常量值。它是一個雙字節指令。
要推9,你不能使用iconst
。 沒有iconst_9
指令。
沒有iconst_9
,所以你必須使用等效(但效率較低)的bipush
沒有iconst_9指令
i_const指令的范圍僅為0~5,因此必須通過push和store吐出實例
指令iconst_ *經過優化,可以處理小的和特定的數字,而bipush(將一個字節作為整數值推入堆棧)適用於更大的數字。
沒有iconst_9
指令。 所以要推9你不能使用iconst。 你必須去bipush
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.