Gee*_*eek 3 java bytecode javap
考虑一下非常简单的人为设计代码:
public class TestJavap {
public static void main(String[] args) {
int a = 3;
int b = 7;
}
}
Run Code Online (Sandbox Code Playgroud)
javap产生这个:
public static void main(java.lang.String[]);
Code:
0: iconst_3
1: istore_1
2: bipush 7
4: istore_2
5: return
Run Code Online (Sandbox Code Playgroud)
为什么编译器非常类似领域生产不同字节码a和b.两者都是用常量文字初始化的整数类型.
因为a它从池中取出常量iconst_3,然后将其存储在变量中,istore_1而对于b,它使用完全不同的机制(bipush和的 组合istore).
why the compiler is producing different byte code for very similar fields a and b
Run Code Online (Sandbox Code Playgroud)
使用整数-1 - 5 iconst_x(x是0到5的数字),它已经是一个常数字节码.
iconst_m1 02 ? -1 load the int value -1 onto the stack
iconst_0 03 ? 0 load the int value 0 onto the stack
iconst_1 04 ? 1 load the int value 1 onto the stack
iconst_2 05 ? 2 load the int value 2 onto the stack
iconst_3 06 ? 3 load the int value 3 onto the stack
iconst_4 07 ? 4 load the int value 4 onto the stack
iconst_5 08 ? 5 load the int value 5 onto the stack
Run Code Online (Sandbox Code Playgroud)
因此,如果数字不是iconst_字节码的常量值,那么它将使用bipush字节码.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |