JVM之PC寄存器

返回主博客

返回上層

 

PC寄存器(程序計數器)

  1. 以Register命名,原自CPU的寄存器,是對物理寄存器的抽象模擬,寄存器存儲指令相關的現場信息。
  2. PC寄存器用來指向下一行需要執行的指令,由執行引擎讀取下一條指令。
  3. 任何線程在當前時間只有一個方法在執行,就是當前方法,PC寄存器會存儲當前線程正在執行的方法的JVM指令地址。但是如果是正在執行native方法,則是未指定的值undefined。
  4. 他是程序控制流的指示器,分支,循環,跳轉,異常,線程恢復等基礎功能都需要依賴他,
  5. 字節碼解釋工作時,就是通過改變這個計數器的值來選取下一條需要執行的字節碼指令。
  6. JVM中唯一一個沒有溢出的區域。

 

 

 

兩個常見問題:

使用PC寄存器存儲字節碼指令地址有什麼用?

爲什麼使用PC寄存器當前線程的執行地址?

  1. 因爲CPU需要不停的切換各個線程,切換回來,我得知道從哪開始繼續執行,所以需要PC寄存器來記錄。
  2. JVM的解釋器就是改變PC寄存器的值來明確下一條該執行哪一條字節碼指令。
  3. 其實java線程是映射到本地線程的,本地如何切換,java是交給操作系統的(線程的切換按道理就應該交給操作系統,線程之前如何切換,java並不管,他是C語言基礎上的)。這樣實現起來就很方便,JVM只需要爲每個線程都配置一個PC寄存器的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章