1、執行引擎數據結構
「虛擬機」的概念是相對於「物理機」而言的,這兩種「機器」都有執行代碼的能力。物理機的執行引擎是直接創建在硬件處理器、物理寄存器、指令集和操做系統層面的;而「虛擬機」的執行引擎是本身實現的,所以能夠自定義指令集和執行引擎的結構體系,並且能夠執行那些不能被硬件直接支持的指令。spa
在不一樣的「虛擬機」實現裏面,執行引擎在執行JAVA代碼的時候有兩種方式:解析實行(經過解釋器執行)和編譯執行(經過即時編譯器編譯成本地代碼執行)。操作系統
2、運行時數據結構線程
棧幀3d
棧幀是用於支持虛擬機進行方法調用和方法執行的數據結構,他是虛擬機運行時數據區的虛擬機棧的棧元素。棧幀存儲了方法的局部變量表、操做數棧、動態連接和方法的返回地址等信息。每個方法從調用開始直至執行完成的過程,都對應的一個棧幀在虛擬機棧裏入棧和出棧的過程。blog
在編譯程序代碼的時候,棧幀中須要多大的局部變量表,多深的操做數棧都已經徹底肯定了,而且寫入到方法表的Code屬性中,所以一個棧幀須要多大的內存,不會受到程序運行期變量數據的影響。內存
一個線程的方法調用鏈可能會很長,不少方法會同時處於執行狀態。對於執行引擎來講,在當前活動的線程中,只有位於棧頂的棧幀纔是有效的,成爲當前棧幀,與這個棧幀相關聯的方法成爲當前方法。編譯器
典型的棧幀概念模型以下圖所示:虛擬機