執行時資料區——程式計數器
概念
程式計數器是一塊較小的記憶體空間,他可以看做是當前執行緒所執行的位元組碼的行號指示器。在虛擬機器的概念模型裡(僅是概念模型,各種虛擬機器可能會通過一些更高效的方式去實現),位元組碼直譯器工作時就是通過改變這個計數器的值來選取下一條需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來完成。
由於java虛擬機器的多執行緒是通過執行緒輪流切換並分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器(對於多核處理器來說是一個核心)只會執行一條執行緒中的指令。因此,為了執行緒切換後能恢復到正確的執行位置,每條執行緒都需要有一個獨立的程式計數器,各條執行緒之間的計數器互不影響,獨立儲存,我們稱這類記憶體區域為“執行緒私有”的記憶體。
如果執行緒正在執行一個java方法,這個計數器記錄的是正在執行的虛擬機器位元組碼指令的地址;如果正在執行的是Native方法,這個計數器為空(Undefined)。此記憶體區域是唯一一個在java虛擬機器規範中沒有規定任何OutOfMemoryError情況的區域。
通俗解釋
對於一個執行中的java程式而言,其中的每一個執行緒都有他自己的程式計數器(PC暫存器),他是在該執行緒啟動時建立的,PC暫存器的大小是一個字長,因此它既能夠持有一個本地指標,也能持有一個returnAddress(returnAddress型別會被Java虛擬機器的jsr、ret和jsr_w指令所使用。returnAddress型別的值指向一條虛擬機器指令的操作碼。與前面介紹的那些數值類的原生型別不同,returnAddress型別在java語言之中並不存在相應的型別,也無法在程式執行期間更改returnAddress型別的值)。當執行緒執行某個java方法時 ,PC暫存器的內容總是下一條被執行指令的”地址”,這裡的”地址”可以是一個本地指標,也可以是在方法位元組碼中相對於該方法起始指令的偏移量。如果該執行緒正在執行一個本地方法,那麼PC暫存器的值是”Undefined”。
本地方法和java方法
java中有兩種方法:java方法和本地方法。java方法是由java語言編寫,編譯成位元組碼,儲存在class檔案中的。本地方法是由其它語言(比如C,C++,或者是組合語言)編寫的,編譯成和處理器相關的機器程式碼。本地方法儲存在動態連線庫中,格式是各個平臺專用的;java方法是與平臺無關的,但是本地方法卻不是。執行中的java程式呼叫本地方法時,虛擬機器裝載包含這個本地方法的動態庫,並呼叫這個方法
參考:
相關文章
- JVM——【執行時資料區】程式計數器JVM
- jvm入門及理解(三)——執行時資料區(程式計數器+本地方法棧)JVM
- jvm-執行時資料區(程式計數器、Java虛擬機器棧、本地方法棧)JVMJava虛擬機
- Java虛擬機器-執行時資料區Java虛擬機
- JVM執行時資料區JVM
- 虛擬機器系列 | JVM執行時資料區虛擬機JVM
- java虛擬機器——執行時資料區域Java虛擬機
- JVM虛擬機器-執行時資料區概述JVM虛擬機
- JVM執行時資料區概述JVM
- JVM執行時資料區域JVM
- 03—執行時資料區概述及執行緒執行緒
- JVM-執行時資料區之PC暫存器JVM
- Java 虛擬機器執行時資料區詳解Java虛擬機
- Java-JVM-執行時資料區JavaJVM
- 5_執行時資料區概述
- JVM——04執行時資料區(2)JVM
- java的執行時資料區域Java
- Java虛擬機器執行時資料區域劃分Java虛擬機
- Golang實現JAVA虛擬機器-執行時資料區GolangJava虛擬機
- Java 虛擬機器中的執行時資料區分析Java虛擬機
- JVM詳解(三)——執行時資料區JVM
- JVM學習-執行時資料區域JVM
- JVM筆記【1】-- 執行時資料區JVM筆記
- JVM的特性,透過程式碼來揭秘執行時資料區JVM
- JVM執行時記憶體資料區域JVM記憶體
- JVM詳解(四)——執行時資料區-堆JVM
- 詳解Java 虛擬機器(第①篇)——執行時資料區域Java虛擬機
- Java 執行時資料區和記憶體模型Java記憶體模型
- 關於Java虛擬機器執行時資料區域的總結Java虛擬機
- Java執行時資料Java
- JVM——記憶體區域:執行時資料區域詳解JVM記憶體
- Stopwatch 計算程式執行時間
- python 實現計時器,統計執行時長Python
- 深入理解Java虛擬機器筆記之一Java執行時資料區Java虛擬機筆記
- 【JVM從小白學成大佬】2.Java虛擬機器執行時資料區JVMJava虛擬機
- 【深入學習JVM 01】執行時資料區域劃分JVM
- Java 虛擬機器:看完就懂 JVM 架構和執行時資料區 (記憶體區域)Java虛擬機JVM架構記憶體
- python程式計算執行時間差Python