本篇是爲了清楚的瞭解我們定義的方法在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:返回