1、源代碼
public class MyTest { public static void main(String[] args) { int a=10; int b=Short.MAX_VALUE+1; int c=a+b; System.out.println(c); } }
2、編譯后的位元組碼檔案

3、加載
(1)常量池中的位元組碼載入到運行時常量池:

(2)方法的位元組碼載入到方法區:

4、main執行緒開始運行,分配堆疊楨記憶體
(1)堆疊記憶體的分配

區域變數表:4
最大運算元堆疊的深度為:2
(2)執行istore_1指令:

將常量10放入到1號槽位
(3)lcd #3
Short.MAX_VALUE+1是在編譯時期就已經計算好了的,lcd命令將計算后的數字放入到運算元堆疊中
(4)istore 2
將堆疊頂的資料彈出,放到二號位置

(5)iload_1和iload_2
分別將區域變數表一號位置和二號位置的資料讀取到運算元堆疊中:


(6)iadd
彈出運算元,并將計算結果存入到運算元堆疊中

(7)istore_3

5、getstatic #4

將System.out的參考地址存放到運算元堆疊中
6、iload_3

7、invokevirtual #5

找到常量池#5項
定位到方法區的方法
生成新的堆疊幀并傳遞引數,執行堆疊幀中的位元組碼
8、return
完成main方法呼叫,彈出main堆疊幀
程式結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/172507.html
標籤:Java
