运行时数据区 – 程序计数器PC
程序计数器PC
学习渠道:尚硅谷
1.理解
我们可以将程序计数器(Program Counter Register)理解为pc计数器、指令计数器、代码行号指示器或者程序钩子。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。
2.特性
1) 占据一块很小内存空间,通常是线程私有,运行速度快
2)生命周期同线程的生命周期保持一致
3)通常我们的程序是复杂的,且代码长度常进行封装,因此,一个线程中往往有多个方法,但,每个时刻只有一个方法在执行(PC指向的当前方法),此时就需要进行方法的跳转,因此,当前的PC地址会被存储,方便方法正常结束后再执行正常逻辑==[从而方便程序进行各种跳转而不会出现失误]==
4)如果在执行native方法,那么PC将是未指定值(undefined)
- 这里的“pc寄存器”是在抽象的JVM层面上的概念——当执行Java方法时,这个抽象的“pc寄存器”存的是Java字节码的地址。实现上可能有两种形式,一种是相对该方法字节码开始处的偏移量,叫做bytecode index,简称bci;另一种是该Java字节码指令在内存里的地址,叫做bytecode pointer,简称bcp。对native方法而言,它的方法体并不是由Java字节码构成的,自然无法应用上述的“Java字节码地址”的概念。所以JVM规范规定,如果当前执行的方法是native的,那么pc寄存器的值未定义——是什么值都可以。
- Java线程总是需要以某种形式映射到OS线程上。映射模型可以是1:1(原生线程模型)、n:1(绿色线程 / 用户态线程模型)、m:n(混合模型)。以HotSpot VM的实现为例,它目前在大多数平台上都使用1:1模型,也就是每个Java线程都直接映射到一个OS线程上执行。
- 作者:RednaxelaFX 链接->