我目前正在阅读JVM的最新规范。很明显,每个线程都有自己的调用堆栈和自己的程序计数器,该计数器跟踪要执行的(下一条)指令。 我的问题可能是转储,但是从描述中我找不到答案。
调用new
或方法时,当前程序计数器存储在哪里?
换句话说,调用方法后,线程现在如何继续?
答案 0 :(得分:2)
答案取决于实现,因为不同的硬件体系结构甚至不同的JVM都可能以不同的方式实现此行为。在标准的Oracle JVM中,您的大多数字节码将通过JIT(Just in Time编译器)编译为本地代码,并且方法调用将与本地代码一样执行(给予或接受一些额外的代码,这些代码可以添加到处理检查点等)。 )。在PC上,这意味着将在调用方法之前将当前寄存器值(包括指令指针/程序计数器)保存在堆栈中。从调用返回时,处理器从堆栈中弹出这些值,其中包括返回地址。