天天看點

JVM記憶體模型——虛拟機棧

描述的是Java方法執行的記憶體模型,用于存儲局部變量表(主要儲存函數的參數以及局部的變量資訊)、操作數棧、動态連結(反射機制就是一種實作)、方法出口等。随線程的啟動而産生,線程的結束而消亡。局部變量分為兩種情況,對于基本類型,會直接在棧上配置設定;如果是引用類型,對象會在堆中配置設定,相應的引用會在棧上(并不是絕對的,逃逸分析正是針對引用類型,如果小對象逃逸的情況不成立,會發生棧上配置設定)。

棧幀是java虛拟機棧的機關元素,每個線程每次調用方法,都會建立一個棧幀,方法調用結束則銷毀棧幀。每個棧幀中都包含局部變量表、操作數棧、動态連結、方法出口。

局部變量表,用于存放方法參數和方法内部定義的局部變量。

操作數棧,方法的執行在操作數棧中完成,每個位元組碼指令往操作數棧進行寫入和提取的過程,就是入棧和出棧的過程。

會出現的兩種異常:

  • StackOverflowError:單個線程請求的棧深度大于虛拟機棧允許的深度(方法遞歸太深);
  • OutOfMemoryError:整個虛拟機棧記憶體耗盡無法申請到記憶體時(啟動的線程太多)。

參考:https://www.cnblogs.com/manayi/p/9293302.html