本篇是为了清楚的了解我们定义的方法在jvm中是如何执行的,了解了这个,以后我们就可以使用字节码插桩来对应用做一些优化及统计,先定义一个简单的方法,如下:
然后我们将其编译成class文件,然后用javap命令看下他的字节码指令,指令为javap -c xxx.class
跳过其他的信息我们直接看方法getNumber,看到输出的信息中有iconst、istore、iload、iadd、imul、ireturn,其含义就是去掉i所对应的汉语,当int取值-1~5时,JVM采用iconst指令将常量压入栈中;当int取值-128~127时,JVM采用bipush指令将常量压入栈中;当int取值-32768~32767时,JVM采用sipush指令将常量压入栈中;当int取值-2147483648~2147483647时,JVM采用ldc指令将常量压入栈中。
0:将常量1压入栈 ;
1:在栈中位置1存储;
2:将常量2压入栈 ;
3:在栈中位置2存储;
4:加载栈中位置1的数据;
5:加载栈中位置2的数据;
6:相加;
7:将常量3压入栈;
8:相乘;
9:在栈中位置3存储;
10:加载栈中位置3的数据;
11:返回