动态连接&方法返回地址

动态连接

每个栈桢都包含一个指向运行时常量池中该栈桢所属方法的引用,持有这个引用

是为了支持方法调用过程中的动态连接(Dynamic Linking)。

字节码中的方法调用指令就以常量池里指向方法的符号引用作为参数。

这些符号引用一部分会在类加载阶段或第一次使用的时候就被转化为直接引用,

这种转化被称为静态解析。另外一部分将在每一次运行期间都转化为直接引用,

这部分就称为动态连接。

方法返回地址

当一个方法开始执行后,只有两种方式退出这个方法。

  • 正常调用完成(Normal Method Invocation Completion

    执行引擎遇到任意一个方法返回的字节码指令

  • 异常调用完成(Abrupt Method Invocation Completion

    方法执行过程中遇到了异常,并且这个异常没有在方法体内得到处理

无论采用何种退出方式,在方法退出之后,都必须返回到最初方法被调用时的位置,

程序才能继续执行,方法返回时可能需要在栈桢中保存一些信息,用来帮助恢复它

的上层主调方法的执行状态。

附加信息

Java虚拟机规范》允许虚拟机实现增加一些规范里没有描述的信息到栈桢之中,

例如与调试、性能收集相关的信息,这部分信息完全取决于具体的虚拟机实现。