Java的棧(Stack)是一種用于存儲程序執行期間方法的運行時數據的數據結構。棧的特點是后進先出(LIFO)的順序。換言之,新的元素添加到棧的頂端,元素的移除也是從頂端開始的。
Java的棧是執行線程私有的,每個線程都有自己的棧。當一個線程啟動時,它的空間大小在創建時就已經確定了。如果Java棧中請求的空間超過了當前可用的空間大小,就會拋出StackOverflowError異常。
public class MyStack { public static void main(String[] args) { int a = 1; int b = 2; int sum = a + b; System.out.println(sum); } }
Java的本地方法棧(Native Method Stack)是與Java棧類似,但是它是為執行本地(非Java)代碼服務的。即使用Java語言與實現語言(如C / C ++)交互所需的棧空間。
Java虛擬機規范并沒有規定本地方法棧的具體實現方式,因此它可能與Java棧實現方式不同。在大多數情況下,本地方法棧也是與線程關聯,在棧空間不足時,會拋出StackOverflowError異常。
public class NativeDemo { public native void sayHello(); static { System.loadLibrary("NativeDemo"); } public static void main(String[] args) { new NativeDemo().sayHello(); } }
以上代碼創建了一個本地方法,在Java方法中調用。在調用時,會先在棧頂創建一個適當的棧幀,并將參數傳遞給本地方法,然后將結果傳回Java方法。