jvm 位元組碼執行流程

2022-02-19 01:44:20 字數 1452 閱讀 2519

1、源**

public

class

mytest

}

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

分別將區域性變數表一號位置和二號位置的資料讀取到運算元棧中:

彈出運算元,並將計算結果存入到運算元棧中

將system.out的引用位址存放到運算元棧中

找到常量池#5項

定位到方法區的方法

生成新的棧幀並傳遞引數,執行棧幀中的位元組碼

8、return

完成main方法呼叫,彈出main棧幀

程式結束

JVM之虛擬機器位元組碼執行引擎

執行時棧幀結構 棧幀儲存方法的區域性變數表 運算元棧 動態鏈結和方法返回位址等,每乙個方法由開始到結束,都對應著乙個棧幀在虛擬機器裡面的出棧入棧過程。對於執行引擎來說,在活動的執行緒中,只有位於棧頂的棧幀才有效,叫做當前棧幀,與這個棧幀相關聯的方法叫做當前方法。區域性變數表 是一組變數值儲存空間,存...

JVM位元組碼執行引擎和動態繫結原理

編譯期就確定了需要多大的區域性變數表,多深的運算元棧,這些資訊全在位元組碼中。只有位於棧頂的棧幀才有效,稱為當前棧幀,所對應的方法就是當前正在執行的方法。容量以變數槽slot為單位,slot記憶體大小隨著需求而變化並且不固定。方法執行時jvm使用區域性變數表完成引數值到引數列表的傳遞過程。slot可...

一夜搞懂 JVM 位元組碼執行引擎

我的 github 部落格 編譯的結果從本地機器碼轉變為位元組碼,是儲存格式發展的一小步,卻是程式語言發展的一大步 首先,丟擲靈魂三問 如果你對上述問題理解得還不是特別透徹的話,可以看下這篇文章 如果理解了,你可以關閉網頁,開啟遊戲放鬆了hhh 下面,筆者將帶你 jvm核心的組成部分之一 執行引擎。...