一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JVM中的程序計數寄存器PC是什么詳解

JVM中的程序計數寄存器PC是什么詳解

2022-01-20 01:09不會編程的派大星 Java教程

這篇文章主要介紹了JVM中的程序計數寄存器PC原理分析,JVM中的程序計數寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存儲指令相關的現場信息

一、PC寄存器概述

JVM中的程序計數寄存器PC是什么詳解

CPU只有把數據裝載到寄存器才能夠運行。這里,并非是廣義上所指的物理寄存器,或許將其翻譯為PC計數器(或指令計數器)會更加貼切(也稱為程序鉤子),并且也不容易引起一些不必要的誤會。JVM中的PC寄存器是對物理PC寄存器的一種抽象模擬。

簡單介紹

1、 PC寄存器是一塊很小的內存空間,幾乎可以忽略不計,也是運行速度最快的存儲區域。

2、 在JVM規范中,每個線程都有它自己的PC寄存器,是線程私有的,生命周期與線程的生命周期保持一致。

3、 任何時間一個線程都只有一個方法在執行,也就是所謂的當前方法,PC寄存器會存儲當前線程的正在執行的Java方法的JVM指令地址;或者,如果是執行的native方法,則是未指定值。

4、 PC寄存器是程序控制流的指示器,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要依賴這個寄存器來完成。

5、 字節碼解釋器工作時就是通過改變這個寄存器的值來選取下一條需要執行的字節碼指令。

6、 PC寄存器是唯一 一個在Java虛擬機規范中沒有規定任何OutOfMemoryError情況的區域。

注:方法區(元數據區)和堆區是有GC(垃圾回收)的,而棧區和PC寄存器是沒有的;棧區、方法區、堆區是有OOM(OutOfMemoryError)的,而PC寄存器沒有。

 

二、PC寄存器的作用

PC寄存器用來存儲指向下一條指令的地址,即將要執行的指令代碼。由執行引擎讀取下一條指令。

JVM中的程序計數寄存器PC是什么詳解

每一個棧幀就相當于存儲了一個方法,棧幀中的每一個指令都有一個標識,這里PC寄存器就存儲了指令的地址,起標識作用,然后執行引擎就根據這個標識來讀取到下一條指令。

 

三、PC寄存器舉例說明

public class PcRegisterTest {
  public static void main(String[] args) {
      int i = 10;
      int j = 5;
      int k = i+j;
  }
}

這里我們運行編譯下這段代碼,然后在進入到out對應的目錄下執行javap命令:

JVM中的程序計數寄存器PC是什么詳解

我們就可以看到反編譯的一個結果:

JVM中的程序計數寄存器PC是什么詳解

上圖紅色框里的數字就是指令地址或者偏移地址,其就是PC寄存器里面存儲的地址。藍色框里的就是操作指令。然后執行引擎就根據這個指令地址取出指定的操作指令來操作虛擬機棧(局部變量表、操作數表),并且翻譯成機器指令,讓CPU對相應的計算。

 

四、解決PC寄存器常問到的兩個面試問題

1、使用PC寄存器存儲字節碼指令地址有什么用呢?

(為什么使用PC寄存器記錄當前線程的執行地址呢?)

JVM中的程序計數寄存器PC是什么詳解

因為CPU需要不停的切換各個線程,這時候切換回來后,就得知道是從哪個指令開始繼續執行。JVM的字節碼解釋器就需要通過改變PC寄存器的值來明確下一條應該執行什么樣的字節碼按指令。

2、PC寄存器為什么會被設定為線程私有的,一個線程一份?

我們都知道所謂的多線程在一個特定的時間段內只會執行其中某一個線程的方法,CPU會不停地做任務切換,這樣必然導致經常中斷或恢復,如何保證分毫無差呢?

1.為了能夠準確地記錄各個線程正在執行的當前字節碼指令地址,最好的辦法自然是為每一個線程都分配一個PC寄存器,這樣一來各個線程之間便可以進行獨立計算,從而不會出現相互干擾的情況。

2.由于CPU時間片輪限制,眾多線程在并發執行過程中,任何一個確定的時刻,一個處理器或者多核處理器中的一個內核,只會執行某個線程中的一條指令。

3.這樣必然導致經常中斷或恢復,如何保證分毫無差呢?每個線程在創建后,都會產生自己的程序計數器和棧幀,程序計數器在各個線程之間互不影響。

 

五、CPU時間片

CPU時間片: 即CPU分配給各個程序的時間,每個線程被分配一個時間段,稱作它的時間片。

在宏觀上: 我們可以同時打開多個應用程序,每個程序并行不悖,同時運行。

但在微觀上: 由于只有一個CPU,一次只能處理程序要求的一部分,如何處理公平,一種方法就是引入時間片,每個程序輪流執行。

總的來說,我們用一句話來概括:宏觀并行,微觀并發。

簡單圖示:

JVM中的程序計數寄存器PC是什么詳解

PC寄存器就到這里以上就是JVM中的程序計數寄存器PC原理分析的詳細內容,更多關于JVM程序計數寄存器PC原理的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/weixin_45827693/article/details/117283089

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: 爱欲荡漾在线观看 | 国产a一级毛片爽爽影院 | 王淑兰与铁柱全文免费阅读 | 久久久久琪琪精品色 | 精品国产一区二区三区久久影院 | 四虎影院新网址 | 日韩欧美一区黑人vs日本人 | 肉文高h调教 | 国产综合成人亚洲区 | 91传媒制片厂果冻有限公司 | 国产福利视频一区二区微拍视频 | 羞羞视频免费观看网站 | 动漫女性扒开尿口羞羞漫画 | 香蕉久久夜色精品国产小优 | 国产香蕉97碰碰在线视频 | 色哟呦| 久久re热在线视频精69 | 国产精品色片 | 国产精品亚洲精品青青青 | 欧美成人aletta ocean | 日韩免费观看 | 黑人开嫩苞 | 日本精品欧洲www | 亚洲国产美女精品久久久久 | 亚洲123区| a毛片免费观看完整 | 亚洲欧美日韩精品高清 | 亚洲天堂中文 | 亚洲视频中文字幕 | 欧美日韩综合网在线观看 | 精品久久久久久久国产潘金莲 | 高清色黄毛片一级毛片 | 婷婷伊人综合亚洲综合网 | 色婷婷狠狠 | 日本在线看 | 香蕉 在线播放 | 日本护士xxxx爽爽爽 | 手机在线免费观看视频 | 国产永久一区二区三区 | 亚洲+国产+图片 | 国自产拍在线天天更新91 |