JVM優(yōu)化:PC 程序計數(shù)器
一、什么是程序計數(shù)器
程序計數(shù)器(Program Counter Register):也叫PC寄存器,是一塊較小的內存空間,它可以看做是當前線程所執(zhí)行 的字節(jié)碼的行號指示器。在虛擬機的概念模型里,字節(jié)碼解釋器工作時就是通過改變這個計數(shù)器的值來選取下一條 需要執(zhí)行的字節(jié)碼指令、分支、循環(huán)、跳轉、異常處理、線程恢復等基礎功能都需要依賴這個計數(shù)器來完成。
二、PC寄存器的特點
(1)區(qū)別于計算機硬件的pc寄存器,兩者不略有不同。計算機用pc寄存器來存放“偽指令”或地址,而相對于虛擬 機,pc寄存器它表現(xiàn)為一塊內存,虛擬機的pc寄存器的功能也是存放偽指令,更確切的說存放的是將要執(zhí)行指令的 地址。
(2)當虛擬機正在執(zhí)行的方法是一個本地(native)方法的時候,jvm的pc寄存器存儲的值是undefined。
(3)程序計數(shù)器是線程私有的,它的生命周期與線程相同,每個線程都有一個。
(4)此內存區(qū)域是唯一一個在Java虛擬機規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域。
Java虛擬機的多線程是通過線程輪流切換并分配處理器執(zhí)行時間的方式來實現(xiàn)的,在任何一個確定的時刻,一個處 理器只會執(zhí)行一條線程中的指令。 因此,為了線程切換后能恢復到正確的執(zhí)行位置,每條線程都需要有一個獨立的程序計數(shù)器,各條線程之間的計數(shù) 器互不影響,獨立存儲,我們稱這類內存區(qū)域為“線程私有”的內存。