2016-01-08 26 views
0

方案: Java使用堆栈来执行带指令的方法。有一个methodA包含一个methodB,当调用methodA时,当前线程堆栈将为methodA创建一个新的Stack-Frame,当它遇到methodB时,它仍然为methodB做同样的事情,并且我明白每个frame包含局部变量表和操作数堆栈,我可以检查methodB使用局部变量表从methodA中获取值,但methodA如何获取methodB的返回值(执行结果)?我没有从Java文档中找到它。堆栈帧如何将当前帧的值传递给旧帧(JVM)?

回答

0

methodB的返回值推送到methodA的操作数堆栈中。

Reference(重点煤矿):

当前帧(§2.6)在这种情况下用于恢复调用,包括其局部变量和操作数堆栈的状态时,用的程序计数器调用者适当增加以跳过方法调用指令。然后执行通常在调用方法的框架中继续,将返回值(如果有的话)推送到该框架的操作数栈上。