在活動執行緒中,只有棧頂的棧時有效的,稱為當前棧幀,與這個棧幀相關聯的方法稱為當前方法。下面對棧幀的4個主要部分進行分析。
存放方法引數和方法內部定義的區域性變數
一些細節:
優點:可移植性、**更加緊湊、編譯器實現更緊湊。確定就是速度更慢。
指向執行時常量池中該棧幀所屬方法的引用,這個引用的為了支援方法呼叫過程的動態連線。具體內容在下面的方法呼叫中解釋。
方法退出(也就是當前棧幀出棧)的兩種方式:
方法呼叫不等同於方法的執行,方法呼叫階段唯一的任務就是確定被呼叫方法的版本。說白了就是找方法,方法唯一就直接確定(解析)。方法不唯一:過載(靜態分配)、重寫(動態分配)
human man = new man();
human
是靜態型別(外觀型別),man
是實際型別
依賴靜態型別來定位方法執行的版本的分配動作稱為靜態分配。最典型的應用是方法過載。
依賴實際型別來定位方法執行的版本的分配動作稱為動態分配。最典型的應用是方法重寫。
乙個測試例子:
public
class
mixtest
static
class
manextends
human
{} static
class
woman
extends
human
{} public
static
class
father
public
void
choice
(man arg)
public
void
choice
(woman arg)
}public
static
class
sonextends
father
public
void
choice
(man arg)
public
void
choice
(woman arg)
}public
static
void
main
(string args)
}/* 程式輸出:
father choose human
son choose man
*/複製**
JVM之虛擬機器位元組碼執行引擎
執行時棧幀結構 棧幀儲存方法的區域性變數表 運算元棧 動態鏈結和方法返回位址等,每乙個方法由開始到結束,都對應著乙個棧幀在虛擬機器裡面的出棧入棧過程。對於執行引擎來說,在活動的執行緒中,只有位於棧頂的棧幀才有效,叫做當前棧幀,與這個棧幀相關聯的方法叫做當前方法。區域性變數表 是一組變數值儲存空間,存...
虛擬機器位元組碼執行引擎
1.概述 虛擬機器 是乙個相對於 物理機 的概念,這兩種機器都有 執行能力,其區別是物理機的執行引擎是直接建立在處理器 硬體 指令集和作業系統層面上的,而虛擬機器的執行引擎是自己實現的,因此可以自行制定指令集與執行引擎的結構體系,並且能夠執行那些不被硬體直接支援的指令集格式。2.執行時棧幀結構 棧幀...
java 虛擬機器位元組碼執行引擎
一 執行時棧幀結構 棧幀分配多少記憶體,與執行時無關 1 區域性變數表 容量以slot 槽為單位 乙個slot 占用32位長度的記憶體空間,可以存的型別有boolean byte char short int float reference retuanaddress 二個slot 可以存long ...