Java內存區域--《深入理解Java虛擬機》學習筆記(一)
阿新 • • 發佈:2017-12-31
控制 指令 組成原理 原理 csdn 內存 硬件 分支 --
程序計數器
程序計數器幹嘛的?
有了它,字節碼解釋器才可以知道下一條要執行的字節碼指令是哪個。
無論是取下一條指令還是分支、循環、跳轉、中斷、線程恢復,都需要這個程序計數器。
程序計數器存在哪?
虛擬機區別於硬件,組成原理裏學的程序計數器是用CS和IP寄存器來存,來表示指令地址。
而Java把程序計數器存在內存裏。
我好像在操作系統中也聽說過程序計數器?
是跟操作系統中的程序計數器有點類似。
在一個時刻,一個處理器只會執行一條線程,HotSpot中使用原生線程模型,OS線程和Java線程1:1映射。
操作系統中,當多個線程輪流切換著執行的時候,每個線程都需要記錄自己被中斷的位置,以方便恢復線程後能夠繼續接著執行。
參考操作系統中的線程控制塊(TCB),當線程切換時要保存上下文狀態,其中就包括指令計數器PC,線程被中斷後再切換回來時就知道了從哪裏開始繼續執行。
Java中也一樣,當有多個線程執行時,也是線程間進行輪轉,當線程切換回來的時候就需要程序計數器來為該線程指明從哪裏開始執行。
所以也就很好理解,Java的程序計數器是‘線程私有的’,每個線程都要有一個。
我聽說程序計數器還可以為空?
Java在執行Native方法時,不是Java在工作,而是調用了操作系統中的方法,所以此時不需要Java的程序計數器,此時為空。
既然程序計數器此時為空,Native方法執行完了以後,該回到哪裏呢?
http://ms.csdn.net/geek/187200
未完待續。
Java內存區域--《深入理解Java虛擬機》學習筆記(一)