1. 程式人生 > 程式設計 >Java中的程式計數器是什麼

Java中的程式計數器是什麼

程式計數器是當前執行緒正在執行的位元組碼的地址。程式計數器是執行緒隔離的,每一個執行緒在工作的時候都有一個獨立的計數器。

JAVA虛擬機器管理的記憶體區域圖

Java中的程式計數器是什麼

1.什麼是程式計數器?

程式計數器是當前執行緒正在執行的位元組碼的地址。程式計數器是執行緒隔離的,每一個執行緒在工作的時候都有一個獨立的計數器。

2.位元組碼的執行原理

編譯後的位元組碼在沒有經過JIT(實時編譯器)編譯前,是通過位元組碼直譯器進行解釋執行。其執行原理為:位元組碼直譯器讀取記憶體中的位元組碼,按照順序讀取位元組碼指令,讀取一個指令就將其翻譯成固定的操作,根據這些操作進行分支,迴圈,跳轉等動作。

3.程式計數器的作用?

從位元組碼的執行原理來看,單執行緒的情況下程式計數器是可有可無的。因為即使沒有程式計數器的情況下,程式會按照指令順序執行下去,即使遇到了分支跳轉這樣的流程也會按照跳轉到指定的指令處繼續順序執行下去,是完全能夠保證執行順序的。

但是現實中程式往往是多執行緒協作完成任務的。JVM的多執行緒是通過CPU時間片輪轉來實現的,某個執行緒在執行的過程中可能會因為時間片耗盡而掛起。當它再次獲取時間片時,需要從掛起的地方繼續執行。在JVM中,通過程式計數器來記錄程式的位元組碼執行位置。程式計數器具有執行緒隔離性,每個執行緒擁有自己的程式計數器

4.程式計數器的特點

(1)程式計數器具有執行緒隔離性

(2)程式計數器佔用的記憶體空間非常小,可以忽略不計

(3)程式計數器是java虛擬機器規範中唯一一個沒有規定任何OutofMemeryError的區域

(4)程式執行的時候,程式計數器是有值的,其記錄的是程式正在執行的位元組碼的地址

(5)執行native本地方法時,程式計數器的值為空。原因是native方法是java通過jni呼叫本地C/C++庫來實現,非java位元組碼實現,所以無法統計

以上就是Java中的程式計數器是什麼的詳細內容,更多關於Java 程式計數器的資料請關注我們其它相關文章!