今天繼續(xù)給大家分享JVM的相關(guān)知識(shí),,今天介紹一下JVM內(nèi)存區(qū)域的程序計(jì)數(shù)器。1,、程序計(jì)數(shù)器概念JVM中的程序計(jì)數(shù)寄存器(Program Counter Register)中Register的命名來(lái)源于CPU的寄存器,寄存器用來(lái)存儲(chǔ)指令相關(guān)的現(xiàn)場(chǎng)信息,。CPU只有把數(shù)據(jù)裝載到寄存器中才能夠正常執(zhí)行指令,。JVM中的寄存器不是物理上的寄存器而是對(duì)物理寄存器的抽象模擬。程序計(jì)數(shù)器有時(shí)候也被稱為為程序鉤子2,、程序計(jì)數(shù)器的作用程序計(jì)數(shù)器是JVM內(nèi)存區(qū)域中一塊較小的內(nèi)存空間,,可以認(rèn)為是當(dāng)前Java線程所執(zhí)行的字節(jié)碼的行號(hào)指示器。字節(jié)碼解釋器工作是通過(guò)改變這個(gè)計(jì)數(shù)器的值來(lái)定位選取下一條待執(zhí)行的字節(jié)碼指令,,選擇,、循環(huán)、異常處理,、線程恢復(fù)等功能都需要依賴程序計(jì)數(shù)器來(lái)完成,。說(shuō)明:JVM虛擬機(jī)為了保證線程切換后還能恢復(fù)到上次正確執(zhí)行的位置,JVM給每條Java線程都分配了一個(gè)獨(dú)立的程序計(jì)數(shù)器,,這樣各線程之間計(jì)數(shù)器互不影響,,獨(dú)立存儲(chǔ)和對(duì)應(yīng)的Java線程生命周期保持一致。- 字節(jié)碼解釋器通過(guò)改變程序計(jì)數(shù)器來(lái)依次讀取指令,,從而實(shí)現(xiàn)Java代碼的流程控制,,比如:順序執(zhí)行、選擇,、循環(huán),、異常處理等。
- 在多線程的情況下,,程序計(jì)數(shù)器主要用于記錄當(dāng)前線程執(zhí)行的具體位置,,這樣在線程切換回來(lái)的時(shí)候知道該線程從哪一個(gè)環(huán)節(jié)開(kāi)始執(zhí)行。
3,、程序計(jì)數(shù)器的特點(diǎn)- 每個(gè)Java線程獨(dú)有,,與其對(duì)應(yīng)的Java線程的生命周期保持一致,。
- 占用JVM內(nèi)存區(qū)域很小的一塊(可忽略不計(jì)),讀取速度很快
- 負(fù)責(zé)準(zhǔn)確記錄每個(gè)線程當(dāng)前執(zhí)行到的具體位置
- 執(zhí)行本地方法,,程序計(jì)數(shù)器會(huì)存儲(chǔ)undefined
- JVM中唯一一個(gè)不會(huì)出現(xiàn)Out Of Memory Error(內(nèi)存溢出錯(cuò)誤)的區(qū)域,,也不需要進(jìn)行垃圾回收
IT技術(shù)分享社區(qū) 個(gè)人博客網(wǎng)站:https://
|