调用时 JVM PC 存储在哪里?

Where is JVM PC stored during a call?

我目前正在阅读 JVM 的最新规范。很明显,每个线程都有自己的调用堆栈和跟踪要执行的(下一条)指令的程序计数器。 我的问题可能是转储,但从描述中找不到答案。

调用new或方法时,当前程序计数器存储在哪里? 换句话说,调用方法后线程现在如何继续?

答案取决于实现,因为不同的硬件架构甚至不同的 JVM 可能以不同的方式实现此行为。在标准的 Oracle JVM 中,大部分字节码将由 JIT(即时编译器)编译为本机代码,并且方法调用将作为本机代码执行(提供或采用一些额外的代码,这些代码可能会被添加以处理检查点等。 ).在 PC 上,这意味着当前寄存器值(包括指令指针/程序计数器)将在方法调用之前保存在堆栈中。当调用 returning 时,处理器从堆栈中弹出这些值,其中包括 return 地址。