程序计数器
程序计数器干嘛的?
有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个。
无论是取下一条指令还是分支、循环、跳转、中断、线程恢复,都需要这个程序计数器。
程序计数器存在哪?
虚拟机区别于硬件,组成原理里学的程序计数器是用CS和IP寄存器来存,来表示指令地址。
而Java把程序计数器存在内存里。
我好像在操作系统中也听说过程序计数器?
是跟操作系统中的程序计数器有点类似。
在一个时刻,一个处理器只会执行一条线程,HotSpot中使用原生线程模型,OS线程和Java线程1:1映射。
操作系统中,当多个线程轮流切换着执行的时候,每个线程都需要记录自己被中断的位置,以方便恢复线程后能够继续接着执行。
参考操作系统中的线程控制块(TCB),当线程切换时要保存上下文状态,其中就包括指令计数器PC,线程被中断后再切换回来时就知道了从哪里开始继续执行。
Java中也一样,当有多个线程执行时,也是线程间进行轮转,当线程切换回来的时候就需要程序计数器来为该线程指明从哪里开始执行。
所以也就很好理解,Java的程序计数器是‘线程私有的’,每个线程都要有一个。
我听说程序计数器还可以为空?
Java在执行Native方法时,不是Java在工作,而是调用了操作系统中的方法,所以此时不需要Java的程序计数器,此时为空。
既然程序计数器此时为空,Native方法执行完了以后,该回到哪里呢?
http://ms.csdn.net/geek/187200
未完待续。