JVM中的程式計數暫存器PC是什麼詳解

2022-09-25 20:06:13 字數 1670 閱讀 4717

目錄

cpu只有把資料裝載到暫存器才能夠執行。這裡,並非是廣義上所指的物理暫存器,或許將其翻譯為pc計數器(或指令計數器)會更加貼切(也稱為程式鉤子),並且也不容易引起一些不必要的誤會。jvm中的pc暫存器是對物理pc暫存器的一種抽象模擬。

1、 pc暫存器是一塊很小的記憶體空間,幾乎可以忽略不計,也是執行速度最快的儲存區域。

2、 在jvm規範中,每個執行緒都有它自己的pc暫存器,是執行緒私有的,生命週期與執行緒的生命週期保持一致。

3、 任何時間乙個執行緒都只有乙個方法在執行,也就是所謂的當前方法,p暫存器會儲存當前執行緒的正在執行的j**a方法的jvm指令位址;或者,如果是執行的native方法,則是未指定值。

4、 pc暫存器是程式控制流的指示器,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個暫存器來完成。

5、 位元組碼直譯器工作時就是通過改變這個暫存器的值來選取下一條需要執行的位元組碼指令。

6、 pc暫存器是唯一 乙個在j**a虛擬機器規範中沒有規定任何outowww.cppcns.comfmemoryerror情況的區域。

注:方法區(元資料區)和堆區是有gc(垃圾**)的,而棧區和pc暫存器是沒有的;棧區、方法區、堆區是有oom(outofmemoryerror)的,而pc暫存器沒有。

pc暫存器用來儲存指向下一條指令的位址,即將要執行的指令**。由執行引擎讀取下一條指令。

每乙個棧幀就相當於儲存了乙個方法,棧幀中的每乙個指令都有乙個標識,這裡pc暫存器就儲存了指令的位址,起標識作用,然後執行引擎就根據這個標識來讀取到下一條指令。

public class pcregistertest

}這裡我們執行編譯下這段**,然後在進入到out對應的目錄下執行j**ap命令:

我們就可以看到反編譯的乙個結果:

上圖紅色框裡的數字就是指令位址或者偏移位址,其就是pc暫存器裡面儲存的位址。藍色框裡的就是操作指令。然後執行引擎就根據這個指令位址取出指定的操作指令來操作虛擬機器棧(區域性變數表、運算元表),並且翻譯成機器指令,讓cpu對相應的計算。

(為什麼使用pc暫存器記錄當前執行緒的執行位址呢?)

因為cpu需要不停的切換各個執行緒,這時候切換回來後,就得知道是從哪個指令開始繼續執行。jvm的位元組碼直譯器就需要通過改變pc暫存器的值來明確下一條應該執行什麼樣的位元組碼按指令。

我們都知道所謂的多執行緒在乙個特定的時間段內只會執行其中某乙個執行緒的方法,cpu會不停地做任務切換,這樣必然導致經常中斷或恢復,如何保證分毫無差呢?

1.為了能夠準確地記錄各個執行緒正在執行的當前位元組碼指令位址,最好的辦法自然是為每乙個執行緒都分配乙個pc暫存器,這樣一來各個執行緒之間便可以進行獨立計算,從而不會出現相互干擾的情況。

2.由於cpu時間片輪限制,眾多執行緒在併發執行過程中,任何乙個確定的時刻,乙個處理器或者多核處理器中的乙個核心,只會執行某個執行緒中的一條指令。

3.這樣必然導致經常中斷或恢復,如何保證分毫無差呢?每個執行緒在建立後,都會產生自己的程式計數器和棧幀,程式計數器在各個執行緒之間互不影響。

cpu時間片: 即cpu分配給各個程式的時間,每個執行緒被分配乙個時間段,稱作它的時間片。

在巨集觀上: 我們可以同時開啟多個應用程式,每個程式並行不悖,同時執行。

但在微觀上: 由於只有乙個cpu,一次只能處etjgzfun理程式要求的一部分,如何處理公平,一種方法就是引入時間片,每個程式輪流執行。

總的來說,我們用一句話來概括:巨集觀並行,微觀併發。

簡單圖示:

PC並口的暫存器

pc並口的暫存器 本文摘自王洪輝老師的 嵌入式系統linux核心開發實戰指南 arm平台 一書 pc上的程式通過訪問並口的i o埠暫存器來訪問 控制並口的管腳訊號,這些埠包括資料埠 狀態埠和控制埠,其中每個埠都有自己的埠號,相當於它們的位址。程式通過埠號來訪問埠暫存器。pc並口1的資料埠號為3bch...

ARM彙編中PC暫存器詳解

近日,在研究一些開源native層hook方案的實現方式,並據此對arm彙編層中容易出問題的一些地方做了整理,以便後來人能有從中有所收穫並應用於現實問題中。當然,文中許多介紹參考了許多零散的文章,本文重點工作在於對相關概念的整理收集,並按相對合理順序引出後文中對hook技術中的一些難點的解讀。and...

程式計數器和指令暫存器

暫存器是 處理器內的組成部分。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令 資料和位址。在 處理器的控制部件中,包含的暫存器有指令暫存器 ir 和程式計數器 pc 指令暫存器 instruction register 儲存現在正在被執行的指令。執行一條指令時,首先需要根據pc中存放的指令位...