JVM如何从函数返回

时间:2016-11-07 21:25:59

标签: java jvm

例如,x86将堆栈上的返回地址推送,然后(返回时)弹出它。 JVM如何解决这个问题?提前致谢。

1 个答案:

答案 0 :(得分:2)

如果您指的是跳转指令jsrjsr_w及其ret,它们的行为与x86上的相似,则返回地址和参数将被推送到堆栈并返回返回时从那里检索地址。

但重要的是要注意,这里我们讨论的是微型子程序,而不是Java方法。

对Java方法的调用是使用特定的invoke_*字节码指令执行的,这些指令在实现方面可能会有所不同(取决于您使用的jvm),并且需要处理的内容远远超过'简单的跳转指令所需的。

他们仍然会使用堆栈并为每个方法调用定义一个新的调用框架,但是从函数返回的操作将由invoke_*实现直接处理,目标java方法只需要正确存储堆栈框架上的返回值。