搜索
写经验 领红包
 > 育儿

jvm程序计数器(jvm程序计数器的作用与寄存器)

导语:jvm——程序计数器

程序计数器定义

程序计数器全称为 Program Counter Register (寄存器)

作用

用于记录下一条jvm指令的执行地址,分支、循环、跳转、异常、线程恢复等都依赖于计数器。

这是一段控制台输出的java代码,编译后各个阶段的情况,主要看二进制字节码部分。当然这里的二进制字节码并不是大家所熟知的计算机的0和1,它并不能直接给到cpu执行,它需要通过解释器解释成一条机器码,机器码就可以交给cpu执行它了。 程序计数器的作用是记住下一条jvm指令的执行地址,从上面图中可以看出jvm指令前面都会有一个数字,可以把这个数字理解为一个指令对于的地址。

当这些指令被加载到虚拟机后执行顺序: 1. 先得到 0:getstatic 指令2. 交给解释器3. 解释器解释成机器码4. 机器码交给cpu,cpu执行

与此同时它会把下一条指令的地址 3地址 放入我们的程序计数器,等第一条指令完全执行完后,解释器就会到程序计数器中取到下一条指令的地址,去找下一条指令找到后重复刚才的流程。

注意:当解释器去程序计数器中取这个 3地址 的时候会把下一条指令 4地址 放入程序计数器中。在物理上实现程序计数器是在一个叫做寄存器来实现的,寄存器可以说是cpu中读取速度最快的部分。

特点

线程私有

java程序支持多线程运行,多线程运行时cpu调度器组件会给线程分配一个时间片。假如给线程一分配一个时间片,在时间片内它的代码没有执行完,它就会把线程一的状态执行一个暂存,切换到线程二中去,线程二执行完后又会切换到线程一。切换回去的时候会去程序计数器中拿到之前最后执行的代码地址,程序计数器绑定自己线程。

不会存在内存溢出。

在jvm规范中已经规定了程序计数器部分不会内存溢出

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小曲创作整理编辑!