Java虛擬機棧的特征
線程私有
后進先出(LIFO)棧
存儲棧幀,支持Java方法的調用、執行和退出
可能出現OutOfMemoryError異常和StackOverflowError異常
Java本地方法棧的特征
線程私有
后進先出(LIFO)棧
作用是支撐Native方法的調用、執行和退出
可能出現OutOfMemoryError異常和StackOverflowError異常
有一些虛擬機(如HotSpot)將Java虛擬機棧和本地方法棧合并實現
棧幀的概念和特征
Java虛擬機棧中存儲的內容,它被用于存儲數據和部分過程結果的數據結構,同時也被用來處理動態鏈接、方法返回值和異常分派
一個完整的棧幀包含:局部變量表、操作數棧、動態連接信息、方法正常完成信息和方法異常完成信息
局部變量表概念和特征
由若干個Slot組成,長度由編譯期決定
單個Slot可以存儲一個類型為boolean,byte,char,short,float,reference和returnAddress的數據,兩個Slot可以存儲一個類型為long或double的數據
局部變量表用于方法間參數傳遞,以及方法執行過程中存儲基礎數據類型的值和對象的引用
操作數棧的概念和特征
是一個后進先出棧,由若干個Entry組成,長度由編譯期決定
單個Entry即可以存儲一個Java虛擬機中定義的任意數據類型的值,包括long和double類型,但是存儲long和double類型的Entry深度為2,其他類型的深度為1
在方法執行過程中,棧幀用于存儲計算參數和計算結果;在方法調用時,操作數棧也用來準備調用方法的參數以及接收方法返回結果
文章列表