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