IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
虛擬機(jī)棧(JVM Stack)
虛擬機(jī)棧(Java Virtual Machine Stack),早期也叫Java棧,每個(gè)線程在創(chuàng)建時(shí)都會(huì)創(chuàng)建一個(gè)虛擬機(jī)棧,其內(nèi)部保存一個(gè)個(gè)的棧幀(Stack Frame),對(duì)應(yīng)著一次次的Java方法調(diào)用。
虛擬機(jī)棧的作用:主管Java程序的運(yùn)行,它保存方法的局部變量、部分結(jié)果,并參與方法的調(diào)用和返回。
每個(gè)方法被執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)”棧幀”,用于存儲(chǔ)局部變量表(包括參數(shù))、操作棧、方法出口等信息。
每個(gè)方法被調(diào)用到執(zhí)行完的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程。
棧幀(Stack Frame) 是用于虛擬機(jī)執(zhí)行時(shí)方法調(diào)用和方法執(zhí)行時(shí)的數(shù)據(jù)結(jié)構(gòu),它是虛擬棧的基本元素,棧幀由局部變量區(qū)、操作數(shù)棧等組成,如下圖所示:
每一個(gè)方法從調(diào)用到方法返回都對(duì)應(yīng)著一個(gè)棧幀入棧出棧的過(guò)程。最頂部的棧幀稱為當(dāng)前棧幀,棧幀所關(guān)聯(lián)的方法稱為當(dāng)前方法,定義這個(gè)方法的類稱為當(dāng)前類,該線程中,虛擬機(jī)有且也只會(huì)對(duì)當(dāng)前棧幀進(jìn)行操作。
棧幀的作用有存儲(chǔ)數(shù)據(jù),部分過(guò)程結(jié)果,處理動(dòng)態(tài)鏈接,方法返回值和異常分派。
每一個(gè)棧幀包含的內(nèi)容有局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法返回地址和一些額外的附加信息。在編譯代碼時(shí),棧幀需要多大的局部變量表,多深的操作數(shù)棧都可以完全確定的,并寫入到方法表的code屬性中。
本地方法棧(Native Stack)
本地方法棧(Native Method Stacks)與虛擬機(jī)棧所發(fā)揮的作用是非常相似的,其區(qū)別不過(guò)是虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java 方法(也就是字節(jié)碼)服務(wù),而本地方法棧則是為虛擬機(jī)使用到的Native 方法服務(wù)。
虛擬機(jī)規(guī)范中對(duì)本地方法棧中的方法使用的語(yǔ)言、使用方式與數(shù)據(jù)結(jié)構(gòu)并沒(méi)有強(qiáng)制規(guī)定,因此具體的虛擬機(jī)可以自由實(shí)現(xiàn)它。
甚至有的虛擬機(jī)(譬如Sun HotSpot 虛擬機(jī))直接就把本地方法棧和虛擬機(jī)棧合二為一。
與虛擬機(jī)棧一樣,本地方法棧區(qū)域也會(huì)拋出StackOverflowError 和OutOfMemoryError異常。
程序計(jì)數(shù)器(PC Register)
在JVM的概念模型里,字節(jié)碼解釋器工作時(shí)就是通過(guò)改變這個(gè)計(jì)數(shù)器的值來(lái)選取下一條需要執(zhí)行的字節(jié)碼指令。
分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能都需要依賴這個(gè)計(jì)數(shù)器來(lái)完成。
JVM的多線程是通過(guò)線程輪流切換并分配處理器執(zhí)行時(shí)間的方式來(lái)實(shí)現(xiàn)的,為了各條線程之間的切換后計(jì)數(shù)器能恢復(fù)到正確的執(zhí)行位置,所以每條線程都會(huì)有一個(gè)獨(dú)立的程序計(jì)數(shù)器。
當(dāng)線程正在執(zhí)行一個(gè)Java方法,程序計(jì)數(shù)器記錄的是正在執(zhí)行的JVM字節(jié)碼指令的地址;如果正在執(zhí)行的是一個(gè)Native(本地方法),那么這個(gè)計(jì)數(shù)器的值則為空(Underfined)。
程序計(jì)數(shù)器占用的內(nèi)存空間很少,也是唯一一個(gè)在JVM規(guī)范中沒(méi)有規(guī)定任何OutOfMemoryError(內(nèi)存不足錯(cuò)誤)的區(qū)域。
更多內(nèi)容
>>本文地址:http://www.yceu.cn/zhuanye/2023/72419.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?