推入堆栈意味着什么?移动或重复方法?

时间:2018-08-17 06:18:15

标签: java memory-management methods stack heap

当对象调用函数时,该函数将从方法区域推入堆栈。我的问题是:

问:在这种情况下,“推动”是什么意思?

这仅仅是意味着移动(从方法区域)或功能的副本(方法的副本被压入堆栈) )?

1 个答案:

答案 0 :(得分:1)

该方法本身没有被压入堆栈。返回地址以及传递给您正在调用的方法的所有参数都会被推送。例如:

void foo() {
    int x = bar();
    int y = x*3;
    ...
}

var bar() {
    ...
    return 5;
}

foo调用bar时,下一条要执行的指令的地址(y的分配)被压入调用堆栈。然后,控制分支到bar,它执行其工作,并将值5放入返回寄存器(此处返回值的方式实际上并不相关)。然后,运行时从调用堆栈弹出返回值,然后分支回到该指令。执行以y = x*3继续。

如果您搜索[java方法调用栈],则会发现一些很好的示例,其中包含更为详细的说明。