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.mzph.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…