2021-02-22 分類: 網(wǎng)站建設(shè)
JAVA虛擬機(jī)管理的內(nèi)存區(qū)域圖
1.什么是程序計(jì)數(shù)器?
程序計(jì)數(shù)器是當(dāng)前線程正在執(zhí)行的字節(jié)碼的地址。程序計(jì)數(shù)器是線程隔離的,每一個(gè)線程在工作的時(shí)候都有一個(gè)獨(dú)立的計(jì)數(shù)器。
2.字節(jié)碼的執(zhí)行原理
編譯后的字節(jié)碼在沒有經(jīng)過JIT(實(shí)時(shí)編譯器)編譯前,是通過字節(jié)碼解釋器進(jìn)行解釋執(zhí)行。其執(zhí)行原理為:字節(jié)碼解釋器讀取內(nèi)存中的字節(jié)碼,按照順序讀取字節(jié)碼指令,讀取一個(gè)指令就將其翻譯成固定的操作,根據(jù)這些操作進(jìn)行分支,循環(huán),跳轉(zhuǎn)等動(dòng)作。
3.程序計(jì)數(shù)器的作用?
從字節(jié)碼的執(zhí)行原理來看,單線程的情況下程序計(jì)數(shù)器是可有可無的。因?yàn)榧词箾]有程序計(jì)數(shù)器的情況下,程序會(huì)按照指令順序執(zhí)行下去,即使遇到了分支跳轉(zhuǎn)這樣的流程也會(huì)按照跳轉(zhuǎn)到指定的指令處繼續(xù)順序執(zhí)行下去,是完全能夠保證執(zhí)行順序的。
但是現(xiàn)實(shí)中程序往往是多線程協(xié)作完成任務(wù)的。JVM的多線程是通過CPU時(shí)間片輪轉(zhuǎn)來實(shí)現(xiàn)的,某個(gè)線程在執(zhí)行的過程中可能會(huì)因?yàn)闀r(shí)間片耗盡而掛起。當(dāng)它再次獲取時(shí)間片時(shí),需要從掛起的地方繼續(xù)執(zhí)行。在JVM中,通過程序計(jì)數(shù)器來記錄程序的字節(jié)碼執(zhí)行位置。程序計(jì)數(shù)器具有線程隔離性,每個(gè)線程擁有自己的程序計(jì)數(shù)器
4.程序計(jì)數(shù)器的特點(diǎn)
(1)程序計(jì)數(shù)器具有線程隔離性
(2)程序計(jì)數(shù)器占用的內(nèi)存空間非常小,可以忽略不計(jì)
(3)程序計(jì)數(shù)器是java虛擬機(jī)規(guī)范中唯一一個(gè)沒有規(guī)定任何OutofMemeryError的區(qū)域
(4)程序執(zhí)行的時(shí)候,程序計(jì)數(shù)器是有值的,其記錄的是程序正在執(zhí)行的字節(jié)碼的地址
(5)執(zhí)行native本地方法時(shí),程序計(jì)數(shù)器的值為空。原因是native方法是java通過jni調(diào)用本地C/C++庫(kù)來實(shí)現(xiàn),非java字節(jié)碼實(shí)現(xiàn),所以無法統(tǒng)計(jì)
文章名稱:Java程序計(jì)數(shù)器刨根問底,大部分程序員都收藏起來了
網(wǎng)站URL:http://jinyejixie.com/news/102358.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、面包屑導(dǎo)航、標(biāo)簽優(yōu)化、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容