4.方法返回地址(Return Address)
存放調用方法的PC寄存器的值【保存了PC寄存器的值,當正常結束后,把這個值給到執行引擎,使線程繼續工作】
一個方法的結束有兩種方式:
正常執行結束
出現未處理的異常,非正常退出
無論哪種方式退出,此方法在退出后都返回到該方法被調用的位置。方法正常退出時,調用者的PC計數器的值作為返回地址,即調用指令下一條指令的地址。而異常退出時,返回地址是要通過異常表來確定,棧幀中一般不會保存這部分信息。
本質上,方法的退出就是當前棧幀出棧。此時,需要恢復上層方法的局部變量、操作數棧、設置PC寄存器值等,讓調用者方法繼續執行下去。
正常完成的出口和異常完成的出口區別在於:通過異常完成出口退出的不會給它的上層調用者產生任何的返回值。
當一個方法開始執行后,只有兩種方式可以退出這個方法:
1、執行引擎遇到任意一個方法返回的字節碼指令(return),會有返回值傳遞給上層的方法調用者,簡稱正常完成出口
2、在方法中遇到異常(Expection),並且這個異常沒有在方法內進行處理,也就是只要在本地方法的異常表中沒有搜索到匹配的異常處理器,就會導致方法退出。簡稱異常完成出口
方法在執行過程中拋出異常時的異常處理存儲在一個異常處理表方便在處理異常時找到處理的對應代碼
一些附加信息
棧幀中還允許攜帶與Java虛擬機實現相關的一些附加信息。例如,對程序調試提供支持的信息。