JVM运行时内存:程序计数器

news2024/7/6 18:21:53

文章目录

  • 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.coloradmin.cn/o/1680837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【idea】idea插件 通过文档注释生成swagger,easyexcel注解

前言:博主的第二个idea插件审核通过啦 (第一个插件是equals inspection) idea的plugin marketplace搜swagger excel doc即可下载安装 ​功能:通过文档注释生成easy Excel或swagger注解 (快捷键altins) ​实际场景:vo返…

实锤,阿里云盾会拦截百度云防护的IP!

今天凌晨,一位站长联系上云加速客服,反馈说,网站突然出现了502的情况。 在检查云防护子域名配置没有问题、本地强制回源没有问题的情况下,我们得出结论是要么服务器内防火墙拦截了云防护的IP段,要么服务器商拦截了云防…

Android 10.0 Launcher3定制folder文件夹2x2布局之三foldericon的2x2的布局后拖拽只能停放在右边的问题修复

1.前言 在10.0的系统rom产品定制化开发中,在对Launcher3的folder文件夹功能定制中,要求folder文件夹跨行显示,就是 2x2布局显示,默认的都是占1格的,现在要求占4格显示,系统默认是不支持显示4格的,所以接下来需要分析相关的 功能,然后来实现这个功能 2.Launcher3定制fo…

点量云流分享:关于实时渲染云推流技术

提到云串流或者云推流很多人可能和游戏关联起来,其实这个技术的应用领域不仅仅是游戏,还有云上旅游、考古、智慧园区、智慧城市、虚拟仿真等等行业。其解决的问题是将一些大型的3D应用程序放在云端,程序在运行的时候也是在云端,这…

Python学习之路 | Python基础语法(一)

数据类型 Python3 中常见的数据类型有: Number(数字)String(字符串)bool(布尔类型)List(列表)Tuple(元组)Set(集合)Dict…

树莓派3B+入门(无外设)

昨日刚到一块树莓派3B,甚是喜爱,然半宿未眠 1、下载 在官网先下载烧录文件https://www.raspberrypi.com/software/ 下载完毕打开,选择,根据自己板子型号定 操作系统用最新的就行,64位不太稳定 储存卡,需…

颜色的表示和还原(一)

这篇文章主要提炼于ICCV 2019 Tutorial: Understanding Color and the In-Camera Image Processing Pipeline for Computer Vision。里面深入浅出地讲解了很多ISP中的基础知识,这里主要对颜色相关的部分做一点总结。 假设不成立了 相机经常被简单地看作是衡量光线…

Qwen学习笔记4:Qwen 7B模型调用天气API实现天气的实时查询

前言 在学习Qwen模型的函数调用功能后,进一步尝试利用本地的Qwen模型访问OpenWeather API来获取实时的天气情况。 参考代码来源于视频教程: 简单粗暴,轻松配置Qwen模型查询实时数据功能_哔哩哔哩_bilibili 说明 该代码运行前&#xff0c…

线性系统(二)

线性系统(二) 1.直观理解线性方程组结构2. 不同解的结论3. 更一般的高斯-约旦消元法4.齐次线性方程组 链接: 线性系统(一) 1.直观理解线性方程组结构 长这样,方程就有解,即相交坐标。 长这样,…

Python | Leetcode Python题解之第92题反转链表II

题目: 题解: class Solution:def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:# 设置 dummyNode 是这一类问题的一般做法dummy_node ListNode(-1)dummy_node.next headpre dummy_nodefor _ in range(left - 1):pre…

Cadence 16.6 PCB Edito如何将鼠标中键反向拉拽改为正向拖拽

Cadence 16.6 PCB Editor如何将鼠标中键反向拉拽改为正向拖拽 Cadence 16.6 PCB Editor默认鼠标中键是反向的拉拽,让我很不适应,在网上找的可行的方法,在这里总结出来,希望能帮到其他工程师。 按照以下步骤进行操作: …

设计模式:外观模式(Facade)

设计模式:外观模式(Facade) 设计模式:外观模式(Facade)模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景模式扩展参考 设计模式&#xff1…

Golang | Leetcode Golang题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; func numDecodings(s string) int {n : len(s)// a f[i-2], b f[i-1], c f[i]a, b, c : 0, 1, 0for i : 1; i < n; i {c 0if s[i-1] ! 0 {c b}if i > 1 && s[i-2] ! 0 && ((s[i-2]-0)*10(s[i-1]-0) < 26) {c…

SAP BSEG VS ACDOCA 差异

温习一下 ACDOCA VS BSEG matinal&#xff1a;S4 HANA 详解ACDOCA与BSEG的区别都在这了_sap acdoca-CSDN博客

16.投影矩阵,最小二乘

文章目录 1. 投影矩阵1.1 投影矩阵P1.2 投影向量 1. 投影矩阵 1.1 投影矩阵P 根据上节知识&#xff0c;我们知道当我们在解 A X b AXb AXb的时候&#xff0c;发现当向量b不在矩阵A的列空间的时候&#xff0c;我们希望的是通过投影&#xff0c;将向量b投影到矩阵A的列空间中&…

机器学习—聚类算法

聚类算法 小白的机器学习笔记 2024/5/15 9:52 文章目录 聚类算法步骤K-means算法优缺点 示例 聚类算法的核心思想&#xff1a; 样本点到每个中心点的距离&#xff0c;最近的就是这个类 步骤 要聚成3类&#xff0c;先初始化3个点 第一步大致确定类别 第二步更新中心点 第三…

Vue的学习 —— <网络请求库Axios>

目录 前言 正文 一、Axios基本概念 二、安装Axios 三、Axios使用方法 四、向服务器发送请求 前言 在之前的开发案例中&#xff0c;我们通常直接在组件中定义数据。但在实际的项目开发中&#xff0c;我们需要从服务器获取数据。当其他用户希望访问我们自己编写的网页时&a…

AI绘画Midjourney 和 Stable Diffusion的区别是什么?如何使用和安装?超详细AI绘画小白零基础入门教程建议收藏!(附资料)

大家好&#xff0c;我是画画的小强 关于AI绘画&#xff0c;大家多多少少都听过Midjourney 和 Stable Diffusion的大名&#xff0c;号称目前市面上最强的两款AI绘画软件。那么今天我们就来分析一下这两款软件的区别在哪里。 Midjourney是一个在线网站&#xff0c;使用它需要用…

码农慎入 | 入坑软路由,退烧IDC,Homelab折腾记

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 俗话说&#xff0c;入门软路由&#xff0c;退坑IDC 这一期&#xff0c;我们将深入探讨一个许多科技爱好者…

小白git

克隆 &#xff1a;git clone 链接地址 如果没有.git文件的话&#xff1a;git init 切换分支&#xff1a;cd 目录 拉代码&#xff1a;git pull 查看你自己改了那些文件&#xff1a;git status 添加道本地暂存区&#xff1a;git add * 提交到远端&#xff1a;git commit …