1. 程式人生 > 其它 >第五篇 JVM之執行時資料區<1>: 程式計數器

第五篇 JVM之執行時資料區<1>: 程式計數器

程式計數器是執行緒私有地一塊很小的記憶體區域,幾乎忽略不計,同時也是執行速度最快的儲存區域,儲存了要執行的下一條指令的地址

一、執行時資料區

Java虛擬機器在執行Java程式的過程中,會把它管理的記憶體劃分成若干個不同的區域,這些區域有各自的用途、建立及銷燬時間,有些區域隨著虛擬機器的啟動一直存在,有些區域則隨著使用者執行緒的啟動和結束而建立和銷燬,這些共同組成了Java虛擬機器的執行時資料區域。

如上圖,執行時資料區由方法區、堆區、Java虛擬機器棧、本地方法棧、程式計數器五部分組成,其中方法區和堆區是執行緒共享的區域,Java虛擬機器棧、本地方法棧和程式計數器是執行緒私有的區域,所以後三種的生命週期隨著執行緒消亡而結束,前兩種伴隨虛擬機器的啟動一直存在。


二、程式計數器

程式計數器(也稱PC暫存器)是執行緒私有地一塊很小的記憶體區域,幾乎忽略不計,同時也是執行速度最快的儲存區域,儲存了要執行的下一條指令的地址。


 作用:

  • 1、保證CPU的處理器切換執行緒執行時,等待的執行緒恢復執行之後能回到正確的位置繼續執行(CPU的處理器在任一時間只能執行一個執行緒的指令,並且會不斷切換執行緒執行)。
  • 2、程式控制流的指示器,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴程式計數器完成。

特性:

  • 1、唯一一個在Java虛擬機器規範中沒有規定任何OutotMemoryError情況的區域
  • 2、對於Java方法,則會儲存執行緒要執行的當前Java方法JVM的指令地址,對於native方法,則未指定值(undefined)。

如圖,Java方法編譯之後會生成JVM位元組碼指令,位元組碼指令並不能被CPU直接執行,需要通過位元組碼執行引擎解釋成機器碼執行,位元組碼執行引擎通過程式計數器中儲存指令地址,找到對應的位元組碼指令,如果執行引擎中正在執行0對應的指令,程式計數器中則記錄的下一條指令的地址就是3,緊接著就是4,5,6,如此推進。