一,什么是程序计数器。
程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
说白了就是代码该执行哪一行比如说下面的代码
程序计数器主要记录的就是行号,该执行哪一行不该执行哪一行的代码比如说5--6--10--11
程序计数器存储的就是这些代码。
以上的红色区域就是存储在程序计数器里面的。
二,程序计数器的特征
2.1,如果线程正在执行的是Java 方法,则这个计数器记录的是正在执行的虚拟机字节码指令地址这个就不用解释了就是上面的能看到的信息。
2.2,程序计数器在方法在线程独享区里面。
这个也好理解,这个也好理解,每个线程都有自己的行号,指示自己该走哪一行了,假如在线程共享区里面的话,两个线程走代码很容易乱的。
线程是CPU 最小的调度单元 ava 虚拟机的多线程是通过切换线程并分配处理器执行时间的方式来实现的,在任何一个确定的时间,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令
如有如下图过程,当A 线程先向处理器发出指令,但当执行到中途一半时,B线程过来执行,且优先级高,此时处理器将A 挂起,B 执行,当B 执行结束需要唤醒A 同时得知道A 的执行位置,就可以查看线程A 中的计数器指令
2.3,如果正在执行的是Native 方法,则这个技术器值为空(Undefined)这个native方法就是电脑硬件实现的方法,这里不用细究就是明白有这回事就行了。
2.4,此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域这个也很好理解,这一块区域是程序员唯一一块不能手动修改的区域,是jvm自动的在生成的而且还是存储的行号东西也不多,所以不会内存溢出的。
2.5,一块较小的内存空间其实想象也就是这回事,存储的东西不多的。而且java语言有些是用到的时候才加载过来的。
原文地址:https://www.cnblogs.com/qingruihappy/p/9691290.html