第十一篇 JVM之執行時資料區<7>: 本地方法棧
阿新 • • 發佈:2021-12-12
在JDK自帶的方法庫中常常看到被native修飾的方法,這些方法沒有方法體實現,它們方法體通常是由C/C++語言實現,這種方法稱為本地方法。
在JDK自帶的方法庫中常常看到被native修飾的方法,這些方法沒有方法體實現,它們方法體通常是由C/C++語言實現,這種方法稱為本地方法。
在JVM規範中,本地方法也有和Java方法一樣的方法呼叫棧,稱為本地方法棧。由於規範對本地方法棧的實用語言、使用方式和資料結構沒有做強制規定,所以JVM虛擬機器可以根據需要自由實現,HotSpot虛擬機器就將Java虛擬機器棧和本地方法棧合二為一。
1、本地方法棧也是執行緒私有的區域。
2、本地方法在被執行時需要載入本地方法庫。
3、本地方法棧和Java虛擬機器棧一樣有記憶體溢位的問題,溢位條件和虛擬機器棧一樣。
- 如果執行緒請求分配的棧容量超過本地方法棧允許的最大容量,將丟擲StackOverflowError異常。
- 如果本地方法棧在動態擴充套件的過程中無法申請到足夠的記憶體,或者在建立執行緒時,無法申請到建立方法棧所需的記憶體,將會丟擲OutMemoryError異常(系統分配給程序記憶體大小上限固定,當建立執行緒越多,單個執行緒所分配的記憶體就越少)。
當某個執行緒呼叫一個本地方法時,它就進入了一個全新的並且不再受虛擬機器限制的世界。它和虛擬機器擁有同樣的如下許可權。
- 本地方法可以通過本地方法介面來訪問虛擬機器內部的執行時資料區。
- 它甚至可以直接使用本地處理器中的暫存器
- 直接從本地記憶體的堆中分配任意數量的記憶體。