天天看點

JVM-運作時資料區-程式計數器(PC寄存器)

作用:PC寄存器用來存儲指向下一條指令的位址,也就是即将要執行的指令代碼。由執行引擎讀取下一條指令。
  • 它是一塊小到幾乎可以忽略不記的記憶體空間。也是運作速度最快的存儲區域。
  • 在JVM中,每個線程有自己私有的PC寄存器,生命周期與線程的生命周期保持一緻
  • 任何時間一個線程隻會執行一個方法,就是所謂的目前方法。程式計數器會存儲目前線程正在執行的Java方法的JVM指令位址。當為本地方法時為undefined
  • 它是程式控制流的訓示器,分支、循環、跳轉、異常處理、線程恢複等基礎功能操作都依賴PC寄存器完成。
  • 位元組碼解釋器工作時就是通過改變這個計數器的值來選取下一條需要執行的位元組碼指令。
  • 它是唯一一個在Java虛拟機中沒有規定任何OOM情況的區域。
JVM-運作時資料區-程式計數器(PC寄存器)

其中指令位址儲存在PC寄存器上

問:使用PC寄存器存儲位元組碼指令位址有什麼用?

問:為什麼使用PC寄存器記錄目前線程執行位址?

答:因為CPU需要不停切換各個線程,如果切回來就得得知從哪個位置繼續執行。JVM位元組碼解釋器就需要通過改變PC寄存器的值來明确下一條應該執行什麼位元組碼指令。

問:為什麼PC寄存器被設定為私有的

答:CPU短時間内隻會執行一個線程的指令,在各個線程中不斷切換中,為了能夠準确地記錄各個線程正在執行的目前位元組碼指令位址,最好的辦法是為每一個線程配置設定一個PC寄存器,進而實作各個線程之間互相不幹擾。

并行和并發