当前位置: 首页 > 知识库问答 >
问题:

在调用过程中JVM PC存储在哪里?

夹谷英杰
2023-03-14

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

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

共有1个答案

左丘耀
2023-03-14

答案是依赖于实现的,因为不同的硬件体系结构甚至不同的JVM可能以不同的方式实现这种行为。在标准Oracle JVM中,大多数字节码将由JIT(Just In Time编译器)编译为本机代码,方法调用将与本机代码一样执行(提供或接受一些额外的代码,这些代码可能被添加来处理检查点等)。在PC上,这意味着当前寄存器值(包括指令指针/程序计数器)将在方法调用之前保存在堆栈上。当从调用返回时,处理器从堆栈中弹出这些值,其中包括返回地址。

 类似资料:
  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 问题内容: 昨晚我刚刚开始学习hibernate,它相当有趣。我在使用hibernate将存储过程作为sql查询调用时遇到麻烦。我已附上来源和错误,请帮助我。谢谢 :) 这是Java文件::: 错误是::: 问题答案: 我基本上不使用hibernate的getNamedQuery重新设计输入,但是java.sql类可以正常工作!

  • 问题内容: 是否允许在SQL CTE语句中执行存储过程?我对sql cte查询有点陌生… 问题答案: 不,对不起 仅SELECT语句 如果您需要使用存储的proc输出(结果集),那么它将是一个临时表

  • 问题内容: 我应该做的是创建一个Java存储过程,然后再从Java程序中调用它。 我在执行JAVA程序时遇到问题-带有1个参数的JDBCPiemers(如下)(我需要弄清楚String Nosaukums)。错误:“无效的列名”。 调用ORACLE中的过程可以正常工作。 这是我已存储在数据库中的存储过程。 我用oracle创建了以下程序包。 这是我在其中调用该过程的Java程序。但是我无法使它工作

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用: