
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言随着互联网的不断发展而被越来越多的程序员掌握,而本文我们就通过案例分析来简单了解一下,Java编程栈结构应用分析。
栈是线程私有的,每个线程都有自己的栈(空间),栈中的数据是以栈帧(StackFrame)的形式存在的,线程会为每个正在执行的方法生成一个栈帧。
1、局部变量表
局部变量表也叫做局部变量数组或本地变量表。
局部变量表是一个数组,里面存储的内容有:
方法参数;
方法内的局部变量,也就是方法内的基本数据类型和对象引用(Reference);
方法返回类型(ReturnAddress)。
2、操作栈
操作栈也叫做操作数栈或表示式栈,操作数栈主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。
思考:为什么不把程序执行过程中的中间结果保存到局部变量表,而是保存到操作数栈中呢?
因为局部变量表是数组,而数组的长度是在其创建时就要确定,所以局部变量表在编译器就决定内容和大小了,那么在程序执行中的这些动态中间结果,是需要新的空间来保存了,而操作数栈就可以实现此功能。
3、动态链接
动态链接也叫做指向运行时常量池的方法引用。
这个区域的概念和作用稍微难理解一点,在每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。当一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。
也就是说:当一个方法调用另一个方法时,不会再创建一个被调用的方法,而是通过常量池的方法引用来调用,而这个区域存储的就是运行时常量池的方法引用,这个区域的作用就是将运行时常量池的符号引用转换成直接引用。
4、方法返回地址
方法返回地址也叫做方法正常退出或异常退出的定义。
方法返回地址存放的是调用该方法的程序计数器的值。程序计数器里面保存的是该线程要执行的下一行指令的位置。
也就是说:在一个方法中调用了另一个方法,当被调用的方法执行完之后,要执行的下一行指令就是保存在此区域的。
5、附加信息
此区域在很多教程上会被省略,因为此区域有可能有数据,也有可能没有数据。这些附加信息是和Java虚拟机实现相关的一些信息。例如,对程序调试提供支持的信息。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。