回覆列表
  • 1 # 使用者834195712159

    JVM程式計數器 VS OS程式計數器

    一. 介紹

    JVM程式計數器:

      程式計數器是一塊較小的記憶體空間,它的作用可以看作是當前執行緒所執行的位元組碼的行號指示器。在虛擬機器的概念模型裡位元組碼直譯器工作時就是透過改變這個計數器的值來選取下一條需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來完成。- - 摘自《深入理解Java虛擬機器》

      OS程式計數器:

    為了保證程式(在作業系統中理解為程序)能夠連續地執行下去,CPU必須具有某些手段來確定下一條指令的地址。而程式計數器正是起到這種作用,所以通常又稱為指令計數器。在程式開始執行前,必須將它的起始地址,即程式的一條指令所在的記憶體單元地址送入PC,因此程式計數器(PC)的內容即是從記憶體提取的第一條指令的地址。當執行指令時,CPU將自動修改PC的內容,即每執行一條指令PC增加一個量,這個量等於指令所含的位元組數,以便使其保持的總是將要執行的下一條指令的地址。由於大多數指令都是按順序來執行的,所以修改的過程通常只是簡單的對PC加1。 當程式轉移時,轉移指令執行的最終結果就是要改變PC的值,此PC值就是轉去的地址,以此實現轉移。有些機器中也稱PC為指令指標IP(Instruction Pointer)

    二. 特點

      JVM程式計數器:

    . 如果執行緒正在執行的是Java 方法,則這個計數器記錄的是正在執行的虛擬機器位元組碼指令地址

    . 如果正在執行的是Native 方法,則這個技術器值為空(Undefined)

    . 此記憶體區域是唯一一個在Java虛擬機器規範中沒有規定任何OutOfMemoryError情況的區域

    . 在任何一個確定的時刻,一個處理器(對於多核處理器來說是一個核心)只會執行一條執行緒中的指令。因此,為了執行緒切換後能恢復到正確的執行位置,每條執行緒都需要有一個獨立的程式計數器,各條執行緒之間的計數器互不影響,獨立儲存,我們稱這類記憶體區域為“執行緒私有”的記憶體

      OS程式計數器:

    . PC永遠指向下一條待執行指令的記憶體地址(永遠不會為Undefined),並且在程式開始執行前,將程式指令序列的起始地址,即程式的第一條指令所在的記憶體單元地址送入PC,

    . CPU按照PC的指示從記憶體讀取第一條指令(取指)。

    . 當執行指令時,CPU自動地修改PC的內容,即每執行一條指令PC增加一個量,這個量等於指令所含的位元組數(指令位元組數),使PC總是指向下一條將要取指的指令地址。

    . 由於大多數指令都是按順序來執行的,所以修改PC的過程通常只是簡單的對PC 加“指令位元組數”。

    . 當程式轉移時,轉移指令執行的最終結果就是要改變PC的值,此PC值就是轉去的目標地址。

    . 處理器總是按照PC指向,取指、譯碼、執行,以此實現了程式轉移。

    三.儲存位置

      JVM程式技術器:

      執行緒獨立的,JVM記憶體模型一塊獨立的儲存區域,一般是CPU快取記憶體中(L1~L3)

      OS程式計數器:

      OS執行緒的PC暫存器中。

  • 中秋節和大豐收的關聯?
  • 高鐵1661停靠站點?