1、源**
public2、編譯後的位元組碼檔案class
mytest
}
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
分別將區域性變數表一號位置和二號位置的資料讀取到運算元棧中:
彈出運算元,並將計算結果存入到運算元棧中
將system.out的引用位址存放到運算元棧中
找到常量池#5項
定位到方法區的方法
生成新的棧幀並傳遞引數,執行棧幀中的位元組碼
8、return
完成main方法呼叫,彈出main棧幀
程式結束
JVM之虛擬機器位元組碼執行引擎
執行時棧幀結構 棧幀儲存方法的區域性變數表 運算元棧 動態鏈結和方法返回位址等,每乙個方法由開始到結束,都對應著乙個棧幀在虛擬機器裡面的出棧入棧過程。對於執行引擎來說,在活動的執行緒中,只有位於棧頂的棧幀才有效,叫做當前棧幀,與這個棧幀相關聯的方法叫做當前方法。區域性變數表 是一組變數值儲存空間,存...
JVM位元組碼執行引擎和動態繫結原理
編譯期就確定了需要多大的區域性變數表,多深的運算元棧,這些資訊全在位元組碼中。只有位於棧頂的棧幀才有效,稱為當前棧幀,所對應的方法就是當前正在執行的方法。容量以變數槽slot為單位,slot記憶體大小隨著需求而變化並且不固定。方法執行時jvm使用區域性變數表完成引數值到引數列表的傳遞過程。slot可...
一夜搞懂 JVM 位元組碼執行引擎
我的 github 部落格 編譯的結果從本地機器碼轉變為位元組碼,是儲存格式發展的一小步,卻是程式語言發展的一大步 首先,丟擲靈魂三問 如果你對上述問題理解得還不是特別透徹的話,可以看下這篇文章 如果理解了,你可以關閉網頁,開啟遊戲放鬆了hhh 下面,筆者將帶你 jvm核心的組成部分之一 執行引擎。...