1.pc寄存器的基本概念和作用
1.JVM中的PC寄存器不是类似CPU的寄存器那样的物理概念,而是一种抽象模拟,也称为程序钩子(钩住一个个的字节码指令)
2.pc寄存器是一个非常小的内存空间,几乎可以忽略不计
3.每个线程有自己的独立的pc寄存器,互不干扰,其生命周期和线程的生命周期一致
4.任何时间每一个线程都只有一个方法在执行,也就是所谓的当前方法,程序计数器存储的就是线程当前正在执行的方法的 jvm指令地址(执行到哪一条指令了),如果是刚好在执行本地方法,则是undefined
5.是程序控制流的指示器,分支,循环,跳转,异常处理,线程恢复等基础功能都需要以来pc寄存器来实现
6.字节码解释器工作时就是通过改变pc寄存器中存储的值来选取下一条将要执行的字节码指令
7.唯一在java虚拟机规范中没有规定 OutOfMemoryError异常的区域
2.pc寄存器2常见问题
1.为什么需要pc寄存器存储字节码指令的地址呢
我们都知道cpu是需要在不同线程间来回切换的,为了保证cpu切换回来之后,不至于忘记上次执行到哪一条指令了,需要只用pc寄存器存储下一条将要执行的指令地址,这个值是有jvm字节码解释器来改变的
2.pc寄存器为啥设定为线程私有
跟上面一样,cpu是分片执行的,需要在不同线程间切换,为了保证各个线程之间的独立性,必须为每一个线程设置一个pc寄存器,存储当前线程下一条要执行的字节码指令地址,以免相互干扰