??Java虛擬機在運行Java程序的過程中會把所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域刀闷,這些區(qū)域都有各自的用途以及創(chuàng)建和銷毀的時間,有的區(qū)域隨著Java虛擬機進程的啟動而存在瘦赫,有些區(qū)域則依賴用戶線程的啟動和結(jié)束而創(chuàng)建和銷毀。
????????????????????????--摘自《深入理解Java虛擬機》
程序計數(shù)器(program counter)
??學(xué)過線程的同學(xué)應(yīng)該了解蛤迎,Java的多線程是通過CPU不斷在線程之間切換來實現(xiàn)的确虱,那么我們不禁要問:當(dāng)線程的指令并沒有執(zhí)行完畢,卻因為時間片耗盡而失去了CPU使用權(quán)替裆,又該如何從掛起的地方繼續(xù)執(zhí)行呢校辩?關(guān)于這個問題,不得不提到一個概念辆童,就是程序計數(shù)器(program counter)宜咒。
??JVM中通過程序計數(shù)器來記錄當(dāng)前字節(jié)碼的執(zhí)行位置,使已經(jīng)掛起的線程重新獲得CPU使用權(quán)后把鉴,依舊能夠繼續(xù)往下執(zhí)行故黑。講解完了用途之后,我們總結(jié)一下程序計數(shù)器的幾個特點:
線程隔離性:每個線程都有一個自己的程序計數(shù)器庭砍,彼此隔離倍阐,互不影響。
執(zhí)行Native方法時逗威,程序計數(shù)器值為空,原因是native方法是通過jni調(diào)用的C/C++庫岔冀,與字節(jié)碼無關(guān)凯旭。
生命周期隨著線程,線程啟動而產(chǎn)生使套,線程結(jié)束而消亡罐呼。
-
由于存儲的是字節(jié)碼地址,在創(chuàng)建時JVM就會為其分配一個足夠大的內(nèi)存侦高,所以沒有規(guī)定任何OutOfMemoryError嫉柴。