Java中的程序計數(shù)器是什么
程序計數(shù)器是當(dāng)前線程正在執(zhí)行的字節(jié)碼的地址。程序計數(shù)器是線程隔離的,每一個線程在工作的時候都有一個獨(dú)立的計數(shù)器。
JAVA虛擬機(jī)管理的內(nèi)存區(qū)域圖
1.什么是程序計數(shù)器?
程序計數(shù)器是當(dāng)前線程正在執(zhí)行的字節(jié)碼的地址。程序計數(shù)器是線程隔離的,每一個線程在工作的時候都有一個獨(dú)立的計數(shù)器。
2.字節(jié)碼的執(zhí)行原理
編譯后的字節(jié)碼在沒有經(jīng)過JIT(實(shí)時編譯器)編譯前,是通過字節(jié)碼解釋器進(jìn)行解釋執(zhí)行。其執(zhí)行原理為:字節(jié)碼解釋器讀取內(nèi)存中的字節(jié)碼,按照順序讀取字節(jié)碼指令,讀取一個指令就將其翻譯成固定的操作,根據(jù)這些操作進(jìn)行分支,循環(huán),跳轉(zhuǎn)等動作。
3.程序計數(shù)器的作用?
從字節(jié)碼的執(zhí)行原理來看,單線程的情況下程序計數(shù)器是可有可無的。因?yàn)榧词箾]有程序計數(shù)器的情況下,程序會按照指令順序執(zhí)行下去,即使遇到了分支跳轉(zhuǎn)這樣的流程也會按照跳轉(zhuǎn)到指定的指令處繼續(xù)順序執(zhí)行下去,是完全能夠保證執(zhí)行順序的。
但是現(xiàn)實(shí)中程序往往是多線程協(xié)作完成任務(wù)的。JVM的多線程是通過CPU時間片輪轉(zhuǎn)來實(shí)現(xiàn)的,某個線程在執(zhí)行的過程中可能會因?yàn)闀r間片耗盡而掛起。當(dāng)它再次獲取時間片時,需要從掛起的地方繼續(xù)執(zhí)行。在JVM中,通過程序計數(shù)器來記錄程序的字節(jié)碼執(zhí)行位置。程序計數(shù)器具有線程隔離性,每個線程擁有自己的程序計數(shù)器
4.程序計數(shù)器的特點(diǎn)
(1)程序計數(shù)器具有線程隔離性
(2)程序計數(shù)器占用的內(nèi)存空間非常小,可以忽略不計
(3)程序計數(shù)器是java虛擬機(jī)規(guī)范中唯一一個沒有規(guī)定任何OutofMemeryError的區(qū)域
(4)程序執(zhí)行的時候,程序計數(shù)器是有值的,其記錄的是程序正在執(zhí)行的字節(jié)碼的地址
(5)執(zhí)行native本地方法時,程序計數(shù)器的值為空。原因是native方法是java通過jni調(diào)用本地C/C++庫來實(shí)現(xiàn),非java字節(jié)碼實(shí)現(xiàn),所以無法統(tǒng)計
以上就是Java中的程序計數(shù)器是什么的詳細(xì)內(nèi)容,更多關(guān)于Java 程序計數(shù)器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
spring整合kaptcha驗(yàn)證碼的實(shí)現(xiàn)
這篇文章主要介紹了spring整合kaptcha驗(yàn)證碼的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05Java動態(tài)字節(jié)碼注入技術(shù)的實(shí)現(xiàn)
Java動態(tài)字節(jié)碼注入技術(shù)是一種在運(yùn)行時修改Java字節(jié)碼的技術(shù),本文主要介紹了Java動態(tài)字節(jié)碼注入技術(shù)的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-08-08Java中Queue的poll()和remove()區(qū)別詳解
這篇文章主要介紹了Java中Queue的poll()和remove()區(qū)別詳解,Queue接口提供了許多方法,其中poll()和remove()是兩個常用的方法,它們的區(qū)別在于,當(dāng)隊列為空時,poll()方法返回null,而remove()方法會拋出,需要的朋友可以參考下2023-07-07一篇文章總結(jié)Java虛擬機(jī)內(nèi)存區(qū)域模型
這篇文章主要介紹了一篇文章總結(jié)Java虛擬機(jī)內(nèi)存區(qū)域模型,本篇文章主要來總結(jié)一下Java虛擬機(jī)內(nèi)存的各個區(qū)域,以及這些區(qū)域的作用、服務(wù)對象以及其中可能產(chǎn)生的問題,作為大家的面試寶典。,需要的朋友可以參考下2019-06-06