1. 程式人生 > 實用技巧 >20200730 尚矽谷 JVM 07 - 本地方法棧

20200730 尚矽谷 JVM 07 - 本地方法棧

07 - 本地方法棧

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

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

  • 允許被實現成固定或者是可動態擴充套件的記憶體大小。(在記憶體溢位方面是相同的)

    • 如果執行緒請求分配的棧容量超過本地方法棧允許的最大容量,Java 虛擬機器將會丟擲一個 StackOverflowError 異常。
    • 如果本地方法棧可以動態擴充套件,並且在嘗試擴充套件的時候無法申請到足夠的記憶體,或者在建立新的執行緒時沒有足夠的記憶體去建立對應的本地方法機,那麼 Java 虛擬機器將會丟擲一個 OutOfMemoryError 異常。
  • 它的具體做法是 Native Method Stack 中登記 native

    方法,在 Execution Engine 執行時載入本地方法庫。

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

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

  • 在 Hotspot JVM 中,直接將本地方法棧和虛擬機器棧合二為一