方法返回地址(return Address)是栈帧的最后一块区域,存放了调用该方法的程序计数器的值。

方法的结束方式有两种:

1、正常结束

当执行引擎在执行字节码指令的过程,如果遇到方法返回的字节码指令,就会结束方法执行并将该栈帧操作数栈栈顶元素返回给调用者(除了void方法对应的return指令),并结束方法。方法返回指令包括ireturn(返回boolean、byte、short、int、char类型)、freturn、dreturn、areturn及return(void方法、构造器方法、类构造方法)

2、异常结束

方法执行过程中遇到异常时,就会去该方法的异常表中查找相应的异常处理器,如果没有匹配到异常处理器,就会结束方法,并且不会返回任何信息给上层方法。

无论以那种方式结束,都要返回到调用该方法的上层方法的位置,方法正常退出时,会将上层方法调用该方法时程序计数器的值作为返回。异常退出时,返回地址要通过异常表来确定,栈帧通常不会保存这部分信息。本质上,方法的退出过程就是当前栈帧出栈的过程,此时,需要恢复上层方法的局部变量表、操作数栈、程序计数器的值等,让线程在方法调用处继续执行下去。