天天看點

2 程式計數器

2 程式計數器

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

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

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

那說了上面這些跟我們要将的程式計數器有什麼關系呢?

程式計數器就是記住下一條jvm指令的執行位址,根據這個位址資訊,我們就能找到這條指令來執行他。

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

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

是線程私有的:我們知道呢,java程式是支援多線程并行運作的

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

是唯一一個在java記憶體區中不會存在記憶體溢出的區

像堆啊,方法,棧啊,都會存在記憶體溢出。

上一篇: C#計數器
下一篇: XML 編輯器

繼續閱讀