探究JVM系列之方法的執行過程(一)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章