当前位置:网站首页>JVM运行时数据区之程序计数器
JVM运行时数据区之程序计数器
2022-07-06 09:30:00 【机智的爆爆哥】
1. 介绍
程序计数器又叫PC寄存器,全称为 Program Counter Register,直译过来的,可以看做是真实物理寄存器的一种抽象模拟。
它主要的作用是存储下一条指令的地址,可以看到下图,从5的位置得到对应的操作指令,放入PC寄存器中存取,之后执行引擎会读取,将操作指令翻译成机器指令,执行一系列的加减乘除之类的操作。
回顾一下,就如下图所示。
2. 特点
它还有以下的一些特点。
- 占用的内存非常小,几乎可以忽略不计,运行速度也很快。
- 线程私有,每个线程都有一块,不会有线程安全问题
- 一个线程对应一个方法,程序计数器会存储线程中运行方法的指令地址,但如果执行的是本地方法,指令地址为underfine,无法记录,因为他只记录Java方法
- 分支 循环 跳转等都依赖于这个计数器
- 在JVM规范中唯一不会OOM的区域
3.CPU时间片
我们来讲讲CPU时间片的概念,这是CPU分配给各个程序执行的时间。
对于单核CPU,没有并行的概念,但是因为CPU时间片的切换,会给我们一种并发的假象,即多个程序同时在运行,因为每个程序可能只运行10ns的时间,来回切换,但本质上其实还是单线程的操作。
但对于多核CPU,多个程序会分配给不同的核心进行处理,同一时刻不同线程执行不同的工作,但对于每个核心,会有并发操作,即各个线程交替,
4. 两个问题
PC寄存器存储字节码指令地址有什么用?
在多线程的情况下,执行一个方法会有多个线程的参与,所以要记录指令地址,否则切换的线程要从头再执行,那肯定是不对的。
就拿4*100米接力来说,接力的那个人在100米,200米,300米的地方等着,而不是从头开始比赛,接力的位置相当于指令地址。
PC寄存器为什么要线程私有?
假设PC寄存器是线程共享的,那么会带来什么问题呢,假设三个线程执行的是三个不同的方法。
首先线程1执行到指令5了,开始切换,线程2执行最终执行到指令7,会将指令5的位置覆盖掉,等线程123都执行了一遍,线程1再开始执行,就是从指令17开始执行了,可是原先它才执行到指令5,但没有记录,肯定会造成程序的混乱,所以程序计数器不得不是线程私有的。
每日分享
如果你曾经也嫌弃过父母没本事,没眼界,意味着你已经走出了父母的局限,而这是他们倾尽一切想看到的局面。
边栏推荐
- ByteDance open source Gan model compression framework, saving up to 97.8% of computing power - iccv 2021
- MySQL字符串函数
- Fdog series (III): use Tencent cloud SMS interface to send SMS, write database, deploy to server, web finale.
- 字节跳动海外技术团队再夺冠:高清视频编码已获17项第一
- 服务器端渲染(SSR)和客户端渲染(CSR)的区别
- Error occurred during initialization of VM Could not reserve enough space for object heap
- Log4j2 major vulnerabilities and Solutions
- The "advertising maniacs" in this group of programmers turned Tiktok advertisements into ar games
- 面试集锦库
- ~82 style of table
猜你喜欢
这116名学生,用3天时间复刻了字节跳动内部真实技术项目
~82 style of table
~73 other text styles
这群程序员中的「广告狂人」,把抖音广告做成了AR游戏
Error occurred during initialization of VM Could not reserve enough space for object heap
MySQL date function
~76 sprite map
Solr new core
Full record of ByteDance technology newcomer training: a guide to the new growth of school recruitment
搭建flutter环境入坑集合
随机推荐
ByteDance open source Gan model compression framework, saving up to 97.8% of computing power - iccv 2021
The "advertising maniacs" in this group of programmers turned Tiktok advertisements into ar games
Activiti目录(三)部署流程、发起流程
Mongodb learning notes
数据传送指令
一个数10年工作经验的微服务架构老师的简历
Jedis
TypeScript基本操作
Ruoyi-Cloud 踩坑的BUG
~77 linear gradient
7-8 likes (need to continue to improve)
After idea installs the plug-in, restart the plug-in and disappear
Fdog series (VI): use QT to communicate between the client and the client through the server (less information, recommended Collection)
7-12 inventory code base
~71 abbreviation attribute of font
arithmetic operation
"One year after graduation, I won ACL best paper"
Design of DS18B20 digital thermometer system
Conception du système de thermomètre numérique DS18B20
string. How to choose h and string and CString