2 程序計數器


2 程序計數器

2.1 定義

定義:program counter register 程序計數器(寄存器)

那我們通過一個例子來給大家解釋程序計數器

 

 

首先明確這樣一個概念,我們的二進制指令是不能直接給cpu執行的,還需要一個翻譯官-解釋器,把我們的二進制字節碼解釋為機器碼,然后交給cpu去執行。

那說了上面這些跟我們要將的程序計數器有什么關系呢?

  • 程序計數器就是記住下一條jvm指令的執行地址,根據這個地址信息,我們就能找到這條指令來執行他。

假如我們正在執行第一條地址為0的getstatic ,然后我們會把下一條指令astore_1的地址3交給程序計數器,等你第一條指令執行完之后,解釋器再去程序計數器里面取到下一條要執行的指令的地址3。根據地址3找到下一條指令astore_1。然后重復上面的過程。

在物理上,實現程序計數器是通過寄存器來實現的。程序計數器是java對物理硬件的一些屏蔽和抽象。那寄存器呢可以說是整個cpu組件里讀取速度最快的一個單元,因為我們讀取動作很頻繁,所以java虛擬機在設計的時候就把寄存器當做程序計數器,用它來存取地址。

2.2 程序計數器的特點

  • 是線程私有的:我們知道呢,java程序是支持多線程並行運行的

假如我們有兩個線程在執行,那我們知道cpu是分成時間片的執行的。那cpu在不斷的做切換,我怎么知道我切換回來之后該執行哪一條指令。兩個線程一個執行一會,比如我線程1正在執行地址為9的指令,然后到點了,線程1程序計數器會記住地址為10的指令地址。cpu跑去執行線程2的地址為5的代碼,也到點了,然后線程2的程序計數器記住地址為6的指令地址。

  • 是唯一一個在java內存區中不會存在內存溢出的區

像堆啊,方法,棧啊,都會存在內存溢出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM