java运行时数据区域-----程序计数器

什么是运行时数据区域?

java虚拟机在执行java程序的过程中会把它所管理的内存分成若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间。主要包含 方法区虚拟机栈本地方法栈程序计数器

程序计数器:可以看做是当前线程执行的字节码的行号指示器,通过高边这个计数器的值来读取下一条(指的是字节码的行数,并不是java代码的行数)需要执行的字节码指令,比如一些循环跳转指令。由于java是通过线程轮流切换,然后分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器只会执行一条线程中的指令,所以为了线程切换之后能到正确的执行位置,每条线程都需要有一个独立的线程计数器,这是线程私有的,各个线程互相不影响。

程序计数器百度百科:用来存放下一条指令所在的单元的地址的地方,当执行一条指令时,首先需要根据PC中存放指令的地址,将指令由内存取到指令寄存器中,这个过程叫做取指令,与此同时PC中的地址或者自动加一,或者由偏移地址给出下一条指令的地址。如此循环,执行每一条指令。

特点:如果线程正在执行java方法,计数器的值不为空,如果执行native方法,计数器的值为空

native方法:也叫本地方法,不是用java语言书写的,本地方法实现一些比如os交互,比java实现简单,效率高,比如好多方法就是用c语言进行书写的。

为什么执行naive方法,程序计数器的值就为null?

我们说程序计数器是为我们的线程的java字节码文件进行服务的,而不是其他语言,本地的一些方法大多数都会直接映射到其原生平台,没有我们jvm什么事情。

猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80240594