- Java虛擬機(jī)棧用于管理Java方法的調(diào)用,而本地方法棧用于管理本地方法的調(diào)用卑硫。
- 本地方法棧,也是線程私有的徒恋。
- 允許被實(shí)現(xiàn)成固定或者是可動(dòng)態(tài)擴(kuò)展的內(nèi)存大小。(在內(nèi)存溢出方面是相同的)
1欢伏、如果線程請(qǐng)求分配的棧容量超過(guò)本地方法棧允許的最大容量, Java虛擬機(jī)將會(huì)拋出一個(gè)stackoverflowError異常入挣。
2、如果本地方法椣跖。可以動(dòng)態(tài)擴(kuò)展,并且在嘗試擴(kuò)展的時(shí)候無(wú)法申請(qǐng)到足夠的內(nèi)存,或者在創(chuàng)建新的線程時(shí)沒(méi)有足夠的內(nèi)存去創(chuàng)建對(duì)應(yīng)的本地方法棧,那么Java虛擬機(jī)將會(huì)拋出一個(gè)outofMemoryerror異常径筏。 - 本地方法是使用c語(yǔ)言實(shí)現(xiàn)的葛假。
- 它的具體做法是Native Method stack中登記native方法,在Execution Engine執(zhí)行時(shí)加載本地方法庫(kù)。
- 當(dāng)某個(gè)線程調(diào)用一個(gè)本地方法時(shí),它就進(jìn)入了一個(gè)全新的并且不再受虛擬機(jī)限制的世界滋恬。它和虛擬機(jī) ,同樣的權(quán)限聊训。
1、本地方法可以通過(guò)本地方法接口來(lái)訪問(wèn)虛擬機(jī)內(nèi)部的運(yùn)行時(shí)數(shù)據(jù)區(qū)恢氯。
2魔眨、它甚至可以直接使用本地處理器中的寄存器
3、直接從本地內(nèi)存的堆中分配任意數(shù)量的內(nèi)存酿雪。 - 并不是所有的JVM都支持本地方法遏暴。因?yàn)镴ava虛擬機(jī)規(guī)范并沒(méi)有明確要求本地方法棧的使用語(yǔ)言、具體實(shí)現(xiàn)方式指黎、數(shù)據(jù)結(jié)構(gòu)等朋凉。如果JVM產(chǎn)品不打算支持native方法,也可以無(wú)需實(shí)現(xiàn)本地方法棧。
- 在Hotspot JVM中,直接將本地方法棧和虛擬機(jī)棧合二為一醋安。