07-本地方法栈
本地方法棧
Java虛擬機棧于管理Java方法的調(diào)用,而****本地方法棧用于管理本地方法的調(diào)用。
本地方法棧,也是線程私有的。
允許被實現(xiàn)成固定或者是可動態(tài)擴展的內(nèi)存大小。(在內(nèi)存溢出方面是相同的)
- 如果線程請求分配的棧容量超過本地方法棧允許的最大容量,Java虛擬機將會拋出一個stackoverflowError 異常。
- 如果本地方法棧可以動態(tài)擴展,并且在嘗試擴展的時候無法申請到足夠的內(nèi)存,或者在創(chuàng)建新的線程時沒有足夠的內(nèi)存去創(chuàng)建對應(yīng)的本地方法棧,那么Java虛擬機將會拋出一個outofMemoryError異常。
本地方法是使用C語言實現(xiàn)的。
它的具體做法是Native Method Stack中登記native方法,在Execution Engine 執(zhí)行時加載本地方法庫。
當(dāng)某個線程調(diào)用一個本地方法時,它就進入了一個全新的并且不再受虛擬機限制的世界。它和虛擬機擁有同樣的權(quán)限。
- 本地方法可以通過本地方法接口來訪問虛擬機內(nèi)部的運行時數(shù)據(jù)區(qū)。
- 它甚至可以直接使用本地處理器中的寄存器
- 直接從本地內(nèi)存的堆中分配任意數(shù)量的內(nèi)存。
并不是所有的JVM都支持本地方法。因為Java虛擬機規(guī)范并沒有明確要求本地方法棧的使用語言、具體實現(xiàn)方式、數(shù)據(jù)結(jié)構(gòu)等。如果JVM產(chǎn)品不打算支持native方法,也可以無需實現(xiàn)本地方法棧。
在Hotspot JVM中,直接將本地方法棧和虛擬機棧合二為一。
總結(jié)
- 上一篇: 06- 本地方法接口
- 下一篇: 10-对象实例化、内存布局与访问定位