當(dāng)一個對象調(diào)用一個函數(shù)時,該函數(shù)會從方法區(qū)被壓入堆棧。我的問題是:問:在這種情況下,“推”是什么意思?這是否僅僅意味著移動(從方法區(qū))或復(fù)制功能(的副本的方法的壓入堆棧)?
1 回答

交互式愛情
TA貢獻(xiàn)1712條經(jīng)驗 獲得超3個贊
方法本身不會被壓入堆棧。推送返回地址,以及傳遞給您正在調(diào)用的方法的任何參數(shù)。例如:
void foo() {
int x = bar();
int y = x*3;
...
}
var bar() {
...
return 5;
}
在foo調(diào)用 時bar,將要執(zhí)行的下一條指令的地址(對 的賦值y)被壓入調(diào)用堆棧。控制然后分支到bar,它做它的事情,并將值5放在返回寄存器中(如何返回值在這里并不真正相關(guān))。然后,運(yùn)行時從調(diào)用堆棧中彈出返回值并分支回到該指令。繼續(xù)執(zhí)行y = x*3。
如果您搜索 [java 方法調(diào)用堆棧],您會發(fā)現(xiàn)一些很好的示例,其中包含更詳細(xì)的解釋。
添加回答
舉報
0/150
提交
取消