Java虛擬機器中棧,棧幀,區域性變量表的概念和特徵。
Java虛擬機器棧的特徵:
執行緒私有:
後進先出(LIFO)棧
java虛擬機器棧和程式計數器一樣,他是執行緒私有的記憶體區域,他的生命週期與執行緒相同,java虛擬機器棧描述的是java方法執行時候的記憶體概念模型,每個方法在執行的時候都會建立一個棧幀,用來建立這個方法的運算元棧,區域性變量表,方法出口,動態連結等資訊,每一個方法在呼叫和結束的過程就對應了一個棧幀在虛擬機器棧中入棧到出棧的過程,java虛擬機器棧是一個後進先出棧,靠後執行的方法會優先完成,後面進入虛擬機器棧的棧幀優先被出棧,這與我們平時執行java方法的印象是一致的,在程式執行中java方法的呼叫,執行和退出,都與java
兩種異常:
1.OutOfMemoryError:
2.StackOverflowError:如果執行緒請求的棧深度大於java虛擬機器允許的最大深度將會丟擲StackOverflowError異常。如果java虛擬機器棧被設計成可以動態擴充套件而動態擴充套件時又無法申請到足夠的記憶體將會丟擲OutOfMemoryError異常。
Java本地方法棧的特徵:
本地方法棧和java虛擬機器棧十分相似,差別不過是java虛擬機器棧是為了java虛擬機器執行位元組碼所服務,而本地方法棧則是為了執行native方法所服務的所以本地方法也是一個私有的記憶體區域,也是後進先出棧,作用是支撐
棧幀的概念和特徵:
區域性變量表概念和特徵:
1:由若干個Slot組成,長度有編譯期決定:
區域性變量表是一組變數值的儲存空間,它用於儲存方法,引數,以及方法內部定義的區域性變數。在java編譯器編譯class的時候就在該方法的code屬性中確定了該方法所需的最大容量,區域性變量表中的變數槽也就是Slot為最小單位,java虛擬機器中並沒有指明一個Slot所需要佔用的記憶體空間大小,只是非常有導向性的描述到任何一個