当对象调用函数时,该函数将从方法区域推入堆栈。我的问题是:
问:在这种情况下,“推动”是什么意思?这仅仅是意味着移动(从方法区域)或功能的副本(方法的副本被压入堆栈) )?
答案 0 :(得分:1)
该方法本身没有被压入堆栈。返回地址以及传递给您正在调用的方法的所有参数都会被推送。例如:
void foo() {
int x = bar();
int y = x*3;
...
}
var bar() {
...
return 5;
}
当foo
调用bar
时,下一条要执行的指令的地址(y
的分配)被压入调用堆栈。然后,控制分支到bar
,它执行其工作,并将值5
放入返回寄存器(此处返回值的方式实际上并不相关)。然后,运行时从调用堆栈弹出返回值,然后分支回到该指令。执行以y = x*3
继续。
如果您搜索[java方法调用栈],则会发现一些很好的示例,其中包含更为详细的说明。