运行时数据区——程序计数器

简介: 概念 程序计数器是一块较小的内存空间,他可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

概念 

程序计数器是一块较小的内存空间,他可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 

由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。 

如果线程正在执行一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器为空(Undefined)。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 

通俗解释

对于一个运行中的java程序而言,其中的每一个线程都有他自己的程序计数器(PC寄存器),他是在该线程启动时创建的,PC寄存器的大小是一个字长,因此它既能够持有一个本地指针,也能持有一个returnAddress(returnAddress类型会被Java虚拟机的jsr、ret和jsr_w指令所使用。returnAddress类型的值指向一条虚拟机指令的操作码。与前面介绍的那些数值类的原生类型不同,returnAddress类型在java语言之中并不存在相应的类型,也无法在程序运行期间更改returnAddress类型的值)。当线程执行某个java方法时 ,PC寄存器的内容总是下一条被执行指令的”地址”,这里的”地址”可以是一个本地指针,也可以是在方法字节码中相对于该方法起始指令的偏移量。如果该线程正在执行一个本地方法,那么PC寄存器的值是”Undefined”。 

本地方法和java方法 

java中有两种方法:java方法和本地方法。java方法是由java语言编写,编译成字节码,存储在class文件中的。本地方法是由其它语言(比如C,C++,或者是汇编语言)编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专用的;java方法是与平台无关的,但是本地方法却不是。运行中的java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法

参考:

https://blog.csdn.net/zhushao_1229/article/details/52782091

https://blog.csdn.net/leaf_0303/article/details/78953669

相关文章
|
5月前
|
存储 缓存 安全
JVM(三)-运行时数据区(栈、程序计数器)
JVM(三)-运行时数据区(栈、程序计数器)
40 2
|
6月前
|
安全 Java
【JVM】运行时数据区、程序计数器
【JVM】运行时数据区、程序计数器
25 0
|
存储 Java 编译器
JVM 运行时数据区吗?
JVM 运行时数据区吗?
58 0
|
6月前
|
存储 安全 Java
JVM之程序计数器和栈
Java虚拟机(JVM)是运行Java程序的关键组件,它负责将Java源代码转换为可执行的字节码,并在运行时管理内存、执行程序等。
|
6月前
|
存储 Java C++
JVM 运行时数据区
JVM 运行时数据区
|
存储 缓存 算法
JVM运行时数据区
这是JVM系列文章的第三篇,这篇文章将对整个JVM运行时数据区和GC垃圾回收详细的介绍。这部分也算是JVM的核心内容了。
95 0
|
安全 Java Linux
08-JVM的内存结构之程序计数器和虚拟机栈
接下来我们继续深入第二个环节,也就是JVM的内存结构,很多人想到BAT等大厂去面试,但是现在互联网大厂面试几乎都会考核JVM相关知识的积累,所在在了解完了JVM的类加载机制之后,我们有必要一起来学习下JVM的内存区域划分。
90 0
08-JVM的内存结构之程序计数器和虚拟机栈
|
存储 缓存 安全
运行时数据区及程序计数器
运行时数据区及程序计数器
|
存储 Java 数据管理
jvm组成-运行时数据区
了解jvm组成-运行时数据区
49 0
|
存储 缓存 安全
【JVM】3. 运行时数据区及程序计数器
【JVM】3. 运行时数据区及程序计数器