62,621
社区成员
发帖
与我相关
我的任务
分享
public static void main(String[] args){
int[] a = new int[1];
a[0] = 0;
//都是给局部基本类型变量赋值0,但是b的效率要远高过c
int b = 0;
int c = a[0];
}
反解析下这段代码的编译文件:
public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=4, args_size=1
0: iconst_1
1: newarray int
3: astore_1
4: aload_1
5: iconst_0
6: iconst_0
7: iastore
8: iconst_0 //0压栈
9: istore_2 //0弹出给变量b
10: aload_1 //数组a的引用入栈
11: iconst_0 //下标0入栈
12: iaload //查找数组a的下标0对应数值,并把该数值压栈
13: istore_3 //刚才压入的数值弹出给变量c
14: return
LineNumberTable:
line 3: 0
line 4: 4
line 7: 8
line 8: 10
line 9: 14
很明显,原本直接赋值只需要压栈出栈2步就行了,而按照你的想法,弄个堆内存数组做缓存,反而需要4步,而且第三步需要根据引用去堆内存找,效率不是大幅提高了,而是大幅降低了。