2016-01-08 64 views
0

方案: Java使用堆棧來執行帶指令的方法。有一個methodA包含一個methodB,當調用methodA時,當前線程堆棧將爲methodA創建一個新的Stack-Frame,當它遇到methodB時,它仍然爲methodB做同樣的事情,並且我明白每個frame包含局部變量表和操作數堆棧,我可以檢查methodB使用局部變量表從methodA中獲取值,但methodA如何獲取methodB的返回值(執行結果)?我沒有從Java文檔中找到它。堆棧幀如何將當前幀的值傳遞給舊幀(JVM)?

回答

0

methodB的返回值推送到methodA的操作數堆棧中。

Reference(重點煤礦):

當前幀(§2.6)在這種情況下用於恢復調用,包括其局部變量和操作數堆棧的狀態時,用的程序計數器調用者適當增加以跳過方法調用指令。然後執行通常在調用方法的框架中繼續,將返回值(如果有的話)推送到該框架的操作數棧上。