JAVA中栈的组成部分

栈的基本单位是栈帧,栈帧由局部变量表,操作数栈,动态链接和返回地址组成。

首先是Java栈中的局部变量表,局部变量表包括函数的参数和局部变量,在函数范围内,这些书存在,函数运行完之后,gc堆会将变量删除,减轻内存负担。

例如:

public class Test1 {
    public int add(int a, int b) {
        int c = a + b;
        return c;
    }
}

每次循环之后,函数进行后,Java会自动清除局部变量,节省空间。

局部变量的基本储存单位是slot,在32位机器中是4byte。如果局部变量被使用完之后,会被新的变量覆盖。

其次,操作数栈:

栈的任务执行顺序是先进后出,后进先出。操作数栈中保存了方法执行过程中各指令的操作数。

然后是动态链接:

官网解释:

(Each frame (§2.6) contains a reference to the run-time constant pool (§2.5.5) for the type of the current method to support dynamic linking of the method code.)

每个栈帧都包含一个对当前方法类型的运行时常量池的引用,以支持方法代码的动态链接。(是对常量池的引用)

当方法A入栈后,帧数据区中的动态链接会持有对当前方法所属类的常量池的引用,当A中调用了方法B(符号引用),就可以通过常量池查找到具体的直接引用(方法地址)。

运行时常量池:包含几种变量,从编译时已知的数值文本到运行时必须解析的方法和字段引用。运行时常量池的功能类似于传统编程语言的符号表。查表可找到对应的数据信息。

取自Java栈——操作数栈_java 栈空间 操作数栈-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值