zoukankan      html  css  js  c++  java
  • 栈帧的内部结构--动态返回地址(Return Address)

    每个栈帧中包含:

    • 局部变量表(Local Variables)
    • 操作数栈(Opreand Stack) 或表达式栈
    • 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用)
    • 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义)
    • 一些附加信息

    动态返回地址(return address)

    • 存放该调用方法的pc寄存器的值
    • 一个方法的结束,有两种方式
      • 遇到return,将返回值传递给上层方法调用者,简称正常完成出口(返回指令包括ireturn(返回值为boolean,byte,char,short,int),lreturn,freturn,dreturn,以及areturn,还有return 返回为void、实例初始化方法,类和接口的初始化方法)
      • 异常完成出口,即碰到了异常,并且没有在方法内进行处理,就会退出方法。方法在执行过程总抛出异常时的异常处理,储存在一个异常处理表,方法在发生异常时候找到处理异常的代码
    • 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址,而通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息
    • 本质上,方法的退出就是当前栈帧出栈的过程,此时,需要恢复上层方法的数据区等信息,让调用者方法继续执行下去
    • 正常完成出口和异常完成出口的区别在于,通过异常完成出口推出的不会给他的上层调用者产生任何的返回值

    附:JVM学习目录

  • 相关阅读:
    c++ struct 使用
    c++数组、字符串操作
    c++ List、Vector、Stack、Queue使用
    十三、哈希表
    十二、234树
    十一、红黑树
    十、哈夫曼编码
    九、二叉树
    八、高级排序
    七、递归
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13051203.html
Copyright © 2011-2022 走看看