JVM運行時內存:程序計數器

文章目錄

  • 1. 程序計數器的作用
  • 2. 程序計數器的基本特征
  • 3. 程序計數器的問題


在這里插入圖片描述

在這里插入圖片描述


運行時內存整體結構如下圖所示:

在這里插入圖片描述

在這里插入圖片描述


1. 程序計數器的作用

在這里插入圖片描述

  1. 為了保證程序(在操作系統中理解為進程)能夠連續地執行下去,CPU必須具有某些手段來確定下一條指令的地址。而程序計數器正是起到這種作用,所以通常又稱為指令計數器。

  2. 在程序開始執行前,必須將它的起始地址,即程序的一條指令所在的內存單元地址送入PC,因此程序計數器(PC)的內容即是從內存提取的第一條指令的地址。當執行指令時,CPU將自動修改PC的內容,即每執行一條指令PC增加一個量,這個量等于指令所含的字節數,以便使其保持的總是將要執行的下一條指令的地址。

  3. 由于大多數指令都是按順序來執行的,所以修改的過程通常只是簡單的對PC加1。

  4. 當程序轉移時,轉移指令執行的最終結果就是要改變PC的值,此PC值就是轉去的地址,以此實現轉移。有些機器中也稱PC為指令指針IP(Instruction Pointer)。


2. 程序計數器的基本特征

JVM 中的程序計數寄存器(Program Counter Register)中, Register 的命名源于CPU的寄存器,寄存器存儲指令相關的現場信息。 CPU只有把數據裝載到寄存器才能夠運行。

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

  1. 它是一塊很小的內存空間,幾乎可以忽略不記。也是運行速度最快的存儲區域。不會隨著程序的運行需要更大的空間。
  2. 在JVM規范中,每個線程都有它自己的程序計數器,是線程私有的,生命周期與線程的生命周期保持一致。
  3. 它是唯一一個在Java 虛擬機規范中沒有規定任何OutOtMemoryError 情況的區域。

3. 程序計數器的問題

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

  2. PC寄存器為什么被設定為線程私有的?
    我們都知道所謂的多線程在一個特定的時間段內只會執行其中某一個線程的方法,CPU會不停地做任務切換,這樣必然導致經常中斷或恢復,如何保證分毫無差呢?為了能夠準確地記錄各個線程正在執行的當前字節碼指令地址,最好的辦法自然是為每一個線程都分配一個PC寄存器,這樣一來各個線程之間便可以進行獨立計算,從而不會出現相互干擾的情況。


在這里插入圖片描述



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12658.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12658.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12658.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WSL數據遷移(遷移ext4.vhdx)

WSL的ubuntu默認安裝在C盤,數據文件位于:C:\Users\hzgdi\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx, 使用一段時間后,尤其時使用大量的docker image 和容器后,占用空間較…

【JavaScript】尺寸和位置

DOM對象相關的尺寸和位置屬性 用于獲取和修改元素在頁面中的尺寸和位置。 只讀屬性: clientWidth和clientHeight:獲取元素可視區域的寬度和高度(padding content),不包括邊框和滾動條。 offsetWidth和offsetHeight…

C# WinForm —— 15 DateTimePicker 介紹

1. 簡介 2. 常用屬性 屬性解釋(Name)控件ID,在代碼里引用的時候會用到,一般以 dtp 開頭Format設置顯示時間的格式,包含Long: Short: Time: Custom:采用標準的時間格式 還是 自定義的格式CustomFormat自定…

如何搭建本地DNS服務器

一、搭建本地DNS服務器 1.初始化設置 systemctl disable --now firewalld.service #關閉防火墻,并開機不自啟 setenforce 0 #臨時關閉selinux防火墻 vim /etc/selinux/config …

1727jsp思想政治活動Myeclipse開發mysql數據庫web結構java編程計算機網頁項目

一、源碼特點 JSP 思想政治活動管理系統 是一套完善的web設計系統,對理解JSP java編程開發語言有幫助,系統具有完整的源代碼和數據庫,系統采用web模式,系統主要采用B/S模式開發。開發環境為TOMCAT7.0,Myeclipse8.5開發&#xff…

ArcGIS軟件損壞怎么修復?10.7分享

前言 我們經常ArcGIS用著用著就會出現一些莫名奇怪的情況,比如ArcGIS的工具箱都打,字體丟失等、dll文件缺失。嘗試了很多方法之后沒有效果的,我們可以對軟件做修復 那么修復改如果做呢? 不需要卸載軟件,直接安裝deskt…

C語言編程資源分享 包管理器 內存泄露 串口通迅 編譯器GCC 靜態分析 x86匯編 第三方依賴 媒體處理 內存調試 性能工具 模糊測試

C語言編程資源分享 C語言是一種通用的、過程式的計算機編程語言,支持結構化編程、詞匯變量作用域和遞歸,是靜態類型檢查的。下面是一個簡單的C語言程序示例,它展示了如何編寫一個輸出“Hello, World!”的程序: #include <stdio.h> int main() {printf("Hello…

智慧安防監控EasyCVR視頻匯聚管理平臺視頻播放花屏的原因分析及處理

智慧安防監控EasyCVR視頻管理平臺能在復雜的網絡環境中&#xff0c;將前端設備統一集中接入與匯聚管理。國標GB28181協議視頻監控/視頻匯聚EasyCVR平臺可以提供實時遠程視頻監控、視頻錄像、錄像回放與存儲、告警、語音對講、云臺控制、平臺級聯、磁盤陣列存儲、視頻集中存儲、…

哪個牌子的超聲波清洗機好?四大質量出眾超聲波清洗機匯眾

由于科技的進步&#xff0c;超聲波清洗機已經成為了家庭和專業場所不可或缺的高效清潔工具。它利用超聲波波動產生的微小氣泡來清潔物品表面及細縫中的污漬&#xff0c;實現深層次的清潔效果。特別是對于眼鏡這樣的精密物品&#xff0c;定期進行深度清潔不僅能夠確保視覺的清晰…

Golang 實現枚舉

在Go語言中&#xff0c;沒有內置的枚舉&#xff08;enum&#xff09;類型&#xff0c;但你可以使用幾種不同的方法來模擬枚舉的行為。以下是一些常見的方法&#xff1a; 常量&#xff08;Constants&#xff09;: 你可以使用Go的常量來模擬枚舉。常量是一組固定的值&#xff0c;…

nginx 正向代理

前言: 為了防止自己手殘點了不該點的網站, 導致惡意網站獲取我的個人信息, 或者網站在暗處偷偷獲取我的個人數據, 我需要去關注這些網站同時拉黑這些網站 目標: 將瀏覽器發起的所有請求都經過 nginx 服務器進行轉發, 然后 nginx 需要記錄這些網址以及請求所攜帶的參數信息 成果…

32、Flink 的 DataStream API 物理分區算子詳解

3.物理分區 Flink 提供以下方法讓用戶根據需要在數據轉換完成后對數據分區進行更細粒度的配置。 a&#xff09;自定義分區 DataStream → DataStream 使用自定義的 Partitioner 為每個元素選擇目標任務。 dataStream.partitionCustom(partitioner, "someKey"); …

網絡安全從業者“行話”

目錄 ?編輯 一、攻擊篇 1&#xff0e;攻擊工具 2&#xff0e;攻擊方法 3&#xff0e;攻擊者 二、防守篇 1&#xff0e;軟硬件 2&#xff0e;技術與服務 網絡安全學習資源分享: 特別聲明 一、攻擊篇 1&#xff0e;攻擊工具 肉雞 所謂“肉雞”是一種很形象的比喻&…

【MATLAB】Enigma機加密原理與自實現

文章目錄 什么是EnigmaEnigma機加密通信流程Enigma的物理構造Enigma的加密設置Enigma加密通信密碼重新設置Enigma加密消息拼接注意 Enigma的解密分解設置Enigma解密通信密碼重新設置Enigma解密消息 Enigma的弱點MATLAB自實現Enigma加密與解密Enigma_functionRotate_functiontes…

JavaScript碎碎念

文章目錄 !和!!?? !和!! 邏輯非運算符!接受一個參數&#xff0c;并按如下運作&#xff1a; 將操作數轉化為布爾類型&#xff1a;true/false。返回相反的值。 alert( !true ); // false alert( !0 ); // true兩個非運算!! 用時候用來將某個值轉化為布爾類型 alert( !!&quo…

八大設計模式:適配器模式實現棧的泛型編程 | 通用數據結構接口的秘訣(文末送書)

&#x1f3ac; 鴿芷咕&#xff1a;個人主頁 &#x1f525; 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想&#xff0c;就是為了理想的生活! 引入 哈嘍各位鐵汁們好啊&#xff0c;我是博主鴿芷咕《C干貨基地》是由我的襄陽家鄉零食基地有感而發&#xff0c;不知道各位的…

Leetcode—3146. 兩個字符串的排列差【簡單】

2024每日刷題&#xff08;135&#xff09; Leetcode—3146. 兩個字符串的排列差 實現代碼 class Solution { public:int findPermutationDifference(string s, string t) {int maps[26];int mapt[26];for(int i 0; i < s.size(); i) {int idxs s[i] - a;int idxt t[i] …

上門回收小程序:打破傳統回收模式的局限性

一、引言 在環保意識日益增強的今天&#xff0c;廢品回收已成為我們日常生活中不可或缺的一部分。然而&#xff0c;傳統的回收模式存在著效率低下、回收范圍有限等局限性。為了打破這些局限&#xff0c;我們推出了上門回收小程序&#xff0c;旨在通過數字化、智能化的方式&…

Flutter+Getx仿小米商城項目實戰教程又新增了Flutter調用原生地圖

FlutterGetx仿小米商城項目實戰教程基于Flutter3.x錄制&#xff0c;課程緊貼企業需求&#xff0c;目前已完結176講。教程所講內容支持Android、Ios、華為鴻蒙OS&#xff0c;教程更新于2024年4月09日新增 Flutter 調用百度地圖、新增Flutter充電樁項目地圖實戰。支持2024年3月29…

AXI GPIO IP核配置詳解

AXI GPIO&#xff08;AXI General-Purpose Input/Output&#xff09;設計提供了一個通用的輸入/輸出接口&#xff0c;該接口連接到一個AXI4-Lite接口。AXI GPIO可以被配置為單通道或雙通道設備&#xff0c;每個通道的位寬可以獨立配置。 端口&#xff08;即GPIO引腳&#xff0…