Java是一種面向對象的編程語言,它有一個非常重要的概念:棧(Stack),而虛擬機棧(JVM Stack)是Java虛擬機(JVM)中的一部分,它們是有著密切關系的。
棧是一種數據結構,它具有后進先出(LIFO,Last In First Out)的特點。在Java中,棧用來保存局部變量和方法返回值等信息,也就是說,每一個方法都有自己的棧幀(Stack Frame)。
// 一個簡單的Java方法: public static void main(String[] args) { int a = 1; // 局部變量a int b = 2; // 局部變量b int c = add(a, b); // 調用add方法并傳遞參數a和b,并將返回值保存到局部變量c中 System.out.println(c); // 輸出c的值 } // add方法 public static int add(int a, int b) { return a + b; // 返回a和b的和 } // main方法的棧幀: ---- | c<- main方法的局部變量c ---- | b<- main方法的局部變量b ---- | a<- main方法的局部變量a ---- | | | | | | | | | | | | ---- // add方法的棧幀: ----<- add方法的返回值 ---- | b<- add方法的局部變量b ---- | a<- add方法的局部變量a ----
虛擬機棧是JVM運行時數據區的一部分,它用來存儲Java方法執行時的信息,每一個Java方法在執行時都會創建一個棧幀并壓入虛擬機棧中,棧幀中包含了局部變量表、操作數棧、動態鏈接、方法返回地址等信息。
當Java方法調用結束時,它對應的棧幀會彈出虛擬機棧,并銷毀。如果虛擬機棧空間不夠用,就會拋出StackOverflowError異常;如果Java虛擬機棧容量可以動態擴展,且擴展時無法申請到足夠的內存,就會拋出OutOfMemoryError異常。
下一篇php json服務端