当前位置: 首页 > news >正文

JVM运行时数据区 - 程序计数器

运行时数据区

Java虚拟机在执行Java程序的过程中,会把它管理的内存划分成若干个不同的区域,这些区域有各自的用途、创建及销毁时间,有些区域随着虚拟机的启动一直存在,有些区域则随着用户线程的启动和结束而建立和销毁,这些共同组成了Java虚拟机的运行时数据区域。
在这里插入图片描述
如上图,运行时数据区由方法区、堆区、Java虚拟机栈、本地方法栈、程序计数器五部分组成,其中方法区和堆区是线程共享的区域,Java虚拟机栈、本地方法栈和程序计数器是线程私有的区域,所以后三种的生命周期随着线程消亡而结束,前两种伴随虚拟机的启动一直存在。

程序计数器

程序计数器(也称PC寄存器)是线程私有地一块很小的内存区域,几乎忽略不计,同时也是运行速度最快的存储区域,存储了要执行的下一条指令的地址。

作用:

1、保证CPU的处理器切换线程执行时,等待的线程恢复执行之后能回到正确的位置继续执行(CPU的处理器在任一时间只能执行一个线程的指令,并且会不断切换线程执行)。

2、程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖程序计数器完成。

特性:

1、唯一一个在Java虛拟机规范中没有规定任何OutotMemoryError情况的区域

2、对于Java方法,则会存储线程要执行的当前Java方法JVM的指令地址,对于native方法,则未指定值(undefined)。
在这里插入图片描述

如图,Java方法编译之后会生成JVM字节码指令,字节码指令并不能被CPU直接执行,需要通过字节码执行引擎解释成机器码执行,字节码执行引擎通过程序计数器中存储指令地址,找到对应的字节码指令,如果执行引擎中正在执行0对应的指令,程序计数器中则记录的下一条指令的地址就是3,紧接着就是4,5,6,如此推进。

http://www.lryc.cn/news/360939.html

相关文章:

  • 1.JAVA小项目(零钱通)
  • Redis这一篇就够了
  • Java web应用性能分析之【jvisualvm远程连接云服务器】
  • springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制
  • 【Python】使用 Pandas 统计每行数据中的空值
  • 1pannel部署onenav导航容器编排模板
  • linux--实时性优化
  • React-基础样式控制
  • 制作ChatPDF之前端Vue搭建(二)
  • 汽车IVI中控开发入门及进阶(二十一):DAB和FM 收音机
  • 智能sql LLM
  • 大聪明教你学Java | 深入浅出聊 Stream.parallel()
  • 图解大模型分布式并行各种通信原语
  • 张大哥笔记:下一个风口是什么?
  • AI去衣技术中的几何着色:揭秘数字时尚的魔法
  • Leecode---技巧---只出现一次的数字 / 多数元素
  • 为图片设置经纬度信息
  • 密码和密钥的联系与区别
  • C++编程法则365天一天一条(323)main函数执行之前和之后的动作
  • 阿里云短信服务使用(Java)
  • C++17之std::void_t
  • 零基础入门篇①⑥ Python可变序列类型--字典
  • C语言面试题1-10
  • Qt Designer工具如何修改MainWindow窗口的标题
  • 车辆前向碰撞预警系统性能要求和测试规程
  • C#实现winform中渲染图的展示
  • JTS库的讲解及使用
  • 【C++杂货铺】unordered系列容器
  • 模板-初阶
  • 重载运算符C++---学习笔记