Java JVM——7.本地方法棧

本地方法棧

  Java虛擬機棧於管理Java方法的調用,而本地方法棧用於管理本地方法的調用數據結構

  本地方法棧,也是線程私有的。spa

  容許被實現成固定或者是可動態擴展的內存大小。(在內存溢出方面是相同的)線程

    ✎ 若是線程請求分配的棧容量超過本地方法棧容許的最大容量,Java虛擬機將會拋出一個 StackOverflowError 異常。blog

    ✎ 若是本地方法棧能夠動態擴展,而且在嘗試擴展的時候沒法申請到足夠的內存,或者在建立新的線程時沒有足夠的內存去建立對應的本地方法棧,那麼Java虛擬機將會拋出一個 OutOfMemoryError 異常。接口

  本地方法是使用C語言實現的。內存

  它的具體作法是在 Native Method Stack 中登記 native方法,在 Execution Engine 執行時加載本地方法庫。虛擬機

 

  當某個線程調用一個本地方法時,它就進入了一個全新的而且再也不受虛擬機限制的世界。它和虛擬機擁有一樣的權限。產品

    ➷ 本地方法能夠經過本地方法接口來訪問虛擬機內部的運行時數據區。io

    ➷ 本地方法甚至能夠直接使用本地處理器中的寄存器。class

    ➷ 本地方法能夠直接從本地內存的堆中分配任意數量的內存。

  並非全部的 JVM 都支持本地方法。由於Java虛擬機規範並無明確要求本地方法棧的使用語言、具體實現方式、數據結構等。若是 JVM 產品不打算支持 native 方法,也能夠無需實現本地方法棧。

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

相關文章
相關標籤/搜索