Java虛擬機棧於管理Java方法的調用,而本地方法棧用於管理本地方法的調用。數據結構
本地方法棧,也是線程私有的。spa
容許被實現成固定或者是可動態擴展的內存大小。(在內存溢出方面是相同的)線程
blog
✎ 若是本地方法棧能夠動態擴展,而且在嘗試擴展的時候沒法申請到足夠的內存,或者在建立新的線程時沒有足夠的內存去建立對應的本地方法棧,那麼Java虛擬機將會拋出一個 OutOfMemoryError 異常。接口
本地方法是使用C語言實現的。內存
它的具體作法是在 Native Method Stack 中登記 native方法,在 Execution Engine 執行時加載本地方法庫。虛擬機
當某個線程調用一個本地方法時,它就進入了一個全新的而且再也不受虛擬機限制的世界。它和虛擬機擁有一樣的權限。產品
➷ 本地方法能夠經過本地方法接口來訪問虛擬機內部的運行時數據區。io
➷ 本地方法甚至能夠直接使用本地處理器中的寄存器。class
➷ 本地方法能夠直接從本地內存的堆中分配任意數量的內存。
並非全部的 JVM 都支持本地方法。由於Java虛擬機規範並無明確要求本地方法棧的使用語言、具體實現方式、數據結構等。若是 JVM 產品不打算支持 native 方法,也能夠無需實現本地方法棧。
在Hotspot JVM中,直接將本地方法棧和虛擬機棧合二爲一了。