来表示指令地址。来代表指令地址。

Java虚拟机程序计数器

以书及之P39页

Java虚拟机程序计数器

于开及之P39页

次计数器干嘛的?

出了它,字节码解释器才得以理解下同样长要履行的配节码指令是何许人也。

管取下同样条指令或分支、循环、跳转、中断、线程恢复,都待之序计数器。

次第计数器干嘛的?

发矣她,字节码解释器才足以知道下一样漫长要执行之字节码指令是何人。

无取下一样久指令或分支、循环、跳转、中断、线程恢复,都亟需这顺序计数器。

程序计数器存在哪?

虚拟机区别为硬件,组成原理里套的次第计数器是故CS和IP寄存器来存,来表示指令地址。

如若Java把程序计数器存在内存里。

程序计数器存在哪?

虚拟机区别为硬件,组成原理里模拟的次第计数器是故CS和IP寄存器来存,来表示指令地址。

要是Java把程序计数器存在内存里。

自家好像在操作系统中为听说过程序计数器?

举凡暨操作系统中的程序计数器有点类似。

当一个随时,一个处理器但会尽同一漫漫线程,HotSpot中运用原生线程模型,OS线程和Java线程1:1映射。

操作系统中,当多单线程轮流切换着执行之时段,每个线程都亟待记录自己给搁浅的职位,以有益卷土重来线程后能延续就执行。

参照操作系统中之线程控制块(TCB),当线程切换时只要保留上下文状态,其中虽包括指令计数器PC,线程被中断后又切换回来时虽理解了从何开始继续执行。

Java中呢一如既往,当起多个线程执行时,也是线程间进行滚动,当线程切换回来的时段就需要程序计数器来啊该线程指明从乌开始实践。

据此也就是老大好理解,Java的程序计数器是‘线程私有的’,每个线程都如发生一个。

自身仿佛在操作系统被为闻讯过程序计数器?

凡是和操作系统中之次第计数器有点类似。

以一个整日,一个电脑仅会尽同一长条线程,HotSpot中动用原生线程模型,OS线程和Java线程1:1映射。

操作系统中,当多只线程轮流切换着执行的时节,每个线程都待记录自己被中断的职,以便于卷土重来线程后能持续就执行。

参照操作系统被之线程控制块(TCB),当线程切换时要保存上下文状态,其中虽概括指令计数器PC,线程被中止后重新切换回来时便懂得了起乌开继续执行。

Java中呢同等,当起多独线程执行时,也是线程间进行滚动,当线程切换回来的时段就是待程序计数器来呢该线程指明从哪里开始实施。

之所以啊就算格外好掌握,Java的次第计数器是‘线程私有的’,每个线程都使来一个。

自我听说程序计数器还足以呢空?

Java于尽Native方法时,不是Java在工作,而是调用了操作系统中之办法,所以这时未需Java的次序计数器,此时吧空。

自听说程序计数器还得吧空?

Java在履行Native方法时,不是Java于做事,而是调用了操作系统被之艺术,所以这时候勿欲Java的程序计数器,此时也空。

既然程序计数器此时呢空,Native方法执行完毕了今后,该归哪里也?

本人事先为针对这有问号,就去查了查Java栈帧有关的知识…我是绝非查及啊。

即使失押了c语言的一个栈帧教程,结合在汇编代码:http://ms.csdn.net/geek/187200

若果无思看,我便概括介绍一下:

汇编是这样做的:当一个措施调用一个措施时,用栈来保存上下文(调用一个函数前先行push,最后方了时又pop出来),既然保存了上下文,就足以先保存调用者的pc指针,然后实施完毕方法后,再将pc还原,就可回到上平等重叠方法了。

Java每个方法执行的当儿,都见面以Java虚拟机栈创建一个栈帧。一个方法对应一个栈帧。Java控制不了寄存器,但是该好据此中堆栈来保存之上下文,当方法执行了晚,调整PC指针,让PC指为方调用指令后的同一久指令。 

JVMS7中之2.6.4 Normal Method Invocation
Completion(方法正常调用完成)中写道:

The current frame (§2.6) is used in this case to restore the state of
the invoker, including its local variables and operand stack, with the
program counter of the invoker appropriately incremented to skip past
the method invocation instruction. Execution then continues normally
in the invoking method’s frame with the returned value (if any) pushed
onto the operand stack of that frame.

手动翻译:在这种情形,当前栈桢就吃用来恢复调用者的状态,都过来哪些也?恢复部分变量表、操作数栈

程序计数器(pc指针),而以此顺序计数器要得当地充实,来针对下一样漫长指令(也不怕是调用函数的产一致句)。使调用者方法能够健康地继续执行下去,而且回去值push到了调用方法的操作数栈中。

Native方法吧是方式,当他被调用了后,会跻身本地方法栈。有的虚拟机会将虚拟机栈和本土方法栈合为一个。当Native方法以本土方法栈里执行完时,也会见因类似之建制被PC重新对调用指令后的一样长长的指令。

这个博客里的本地方法栈的觊觎很形象:https://www.cnblogs.com/wade-luffy/p/5813747.html。

既程序计数器此时啊空,Native方法执行完毕了随后,该归哪里吧?

自前面也对之来疑问,就失去查看了查Java栈帧有关的知识…我是未曾查及什么。

就是夺看了c语言的一个栈帧教程,结合在汇编代码:http://ms.csdn.net/geek/187200

而无思量看,我就算简单介绍一下:

汇编是这般做的:当一个计调用一个措施时,用栈来保存上下文(调用一个函数前先push,最后方了时再也pop出来),既然保存了上下文,就得先行保存调用者的pc指针,然后实施完毕方法后,再把pc还原,就可以返回上一致叠方法了。

Java每个方法执行之时光,都见面于Java虚拟机栈创建一个栈帧。一个艺术对应一个栈帧。Java控制不了寄存器,但是当可以用其中堆栈来保存之上下文,当方法执行完毕后,调整PC指针,让PC指于方调用指令后的一样条指令。 

JVMS7中的2.6.4 Normal Method Invocation
Completion(方法正常调用完成)中写道:

The current frame (§2.6) is used in this case to restore the state of
the invoker, including its local variables and operand stack, with the
program counter of the invoker appropriately incremented to skip past
the method invocation instruction. Execution then continues normally
in the invoking method’s frame with the returned value (if any) pushed
onto the operand stack of that frame.

手动翻译:在这种情况,当前栈桢就吃用来还原调用者的状态,都过来哪些也?恢复部分变量表、操作数栈

程序计数器(pc指针),而这个次计数器要得体地追加,来针对下一致修指令(也就算是调用函数的生一样词)。使调用者方法会健康地继续执行下去,而且回去值push到了调用方法的操作数栈中。

Native方法呢是方法,当他让调用了继,会进去本地方法栈。有的虚拟机会将虚拟机栈和本地方法栈合为一个。当Native方法以地面方法栈里执行完时,也会见基于类似之机制于PC重新对调用指令后的同等长指令。

这博客里的当地方法栈的希冀很形象:https://www.cnblogs.com/wade-luffy/p/5813747.html。

相关文章