第 7 章 本地方法棧

2020-08-12 16:31:39

第 7 章 本地方法棧

1、本地方法棧

本地方法棧的特點

  1. Java虛擬機器棧於管理Java方法的呼叫,而本地方法棧用於管理本地方法的呼叫

  2. 本地方法棧,也是執行緒私有的。

  3. 允許被實現成固定或者是可動態擴充套件的記憶體大小(在記憶體溢位方面和虛擬機器棧相同)

    • 如果執行緒請求分配的棧容量超過本地方法棧允許的最大容量,Java虛擬機器將會拋出一個stackoverflowError 異常。
    • 如果本地方法棧可以動態擴充套件,並且在嘗試擴充套件的時候無法申請到足夠的記憶體,或者在建立新的執行緒時沒有足夠的記憶體去建立對應的本地方法棧,那麼Java虛擬機器將會拋出一個outofMemoryError異常。
  4. 本地方法一般是使用C語言實現的。

  5. 它的具體做法是Native Method Stack中登記native方法,在Execution Engine 執行時載入本地方法庫。

image-20200706174708418

注意事項

  1. 當某個執行緒呼叫一個本地方法時,它就進入了一個全新的並且不再受虛擬機器限制的世界。它和虛擬機器擁有同樣的許可權。

    • 本地方法可以通過本地方法介面來存取虛擬機器內部的執行時數據區
    • 它甚至可以直接使用本地處理器中的暫存器
    • 直接從本地記憶體的堆中分配任意數量的記憶體
  2. 並不是所有的JVM都支援本地方法。因爲Java虛擬機器規範並沒有明確要求本地方法棧的使用語言、具體實現方式、數據結構等。如果JVM產品不打算支援native方法,也可以無需實現本地方法棧。

  3. 在Hotspot JVM中,直接將本地方法棧和虛擬機器棧合二爲一。