1. 程式人生 > >JVM程序計數器

JVM程序計數器

代碼 子轉換 通過 pos 線性 感覺 字節碼指令 好友 決定

一、先來看看概念

多線程的Java應用程序:為了讓每個線程正常工作就提出了程序計數器(Programe Counter Register),每個線程都有自己的程序計數器這樣當線程執行切換的時候就可以在上次執行的基礎上繼續執行,僅僅從一條線程線性執行的角度而言,代碼是一條一條的往下執行的,這個時候就是程序計數器;JVM就是通過讀取程序計數器的值來決定下一條需要執行的字節碼指令,進而進行選擇語句、循環、異常處理等;

這個還沒看懂的話不要緊,繼續往下走咯。

二、簡單粗暴的舉例

1.生活中的案例

比如老王正在看電影,他看到三十五分鐘的時候,突然他的QQ好友給他開視頻聊天,這時候肯定打斷他看電影了,假設他qq好友和他視頻完了,他肯定要接著他那35分鐘的進度去繼續看,這時候他怎麽知道我看到35分鐘了?這時候程序計數器就起了作用,他負責管理進度。

是不是略微懂了一點呢?

2.代碼層面的案例

將上面的例子轉換成代碼,是這樣的:

A線程正在執行HelloWorld.class的第三十五行。這時候CPU時間片被B線程搶走了,當A線程重新被分配到時間片時,他怎麽知道我的class運行到哪了?這時候他可以看程序計數器在哪個位置。

這下總該明白了吧?

三、JVM程序計數器的總結

程序計數器作用不多說了,我個人感覺他是為了多線程而生的,單線程情況下完全不需要他。從案例中不難發現,程序計數器是每個線程獨有的,並非線程共享的!

JVM程序計數器