Java中的运行时堆栈
来源:互联网 发布:网络大数据分析 编辑:程序博客网 时间:2024/05/17 06:33
Java中的运行时堆栈
本文主要介绍Java中的运行时堆栈和Java方法调用的过程,如有疑问,欢迎讨论。
Java中方法的调用过程
首先用一张图来展现Java中整个方法的调用流程。
注意:在以下的叙述中,正在运行的系统将采用运行时系统来统称。
在上面这张图中,我们能够很清晰的看到方法的调用过程,当一个方法被调用时:
- 首先,运行时系统会调用一条语句来创建一个活动记录,活动记录包括了调用该方法时的实参列表、方法内的局部变量和对象以及一个返回地址。
- 然后,运行时系统会将活动记录压入运行时堆栈,接着执行被调用方法的方法体。
- 最后,在方法体内的语句执行完成后,运行时系统会读取活动记录中的返回地址,同时将该活动记录弹出运行时堆栈。
- 最终,运行时系统从取得的返回地址处继续执行程序。
Java中的运行时堆栈
从上面方法执行过程的介绍中,我们应该已经对运行时堆栈有了一个大体的认识。
- 运行时堆栈是用来存储活动记录的数据结构。
- 运行时堆栈在单个方法的调用中的作用看起来不是很明显,但是在递归中,运行时堆栈就显得格外重要。
接下来通过阶乘运算的求解来介绍一下运行时堆栈在递归中的应用。
public Class TestFact { public static void main(String[] args) { int result; //...... result = fact(5); System.out.println("结果是:" + result); } public static int fact(int num) { if(num == 0) { return 1; } else { return num * fact(num - 1); } }}
fact()方法的活动记录为(fact方法没有定义局部变量):
在main()方法中调用fact(5)时,运行时堆栈的工作流程如下图:
如上图所示,在调用fact()方法时,相对应的活动记录依次入栈,当实参(num)为0时,递归调用停止,接下来就是递归的返回流程,最终得到要求得的阶乘结果。
总结
以上就是我对Java运行时堆栈的理解,如有不足,欢迎大家指正和讨论。
本文为本人原创,转载请注明出处:http://blog.csdn.net/wy_zhang/article/details/47954781
本文为转载,原文地址为:http://blog.csdn.net/wy_zhang/article/details/47954781
0 0
- Java中的运行时堆栈
- Java中的运行时堆栈
- 编译后程序运行时在内存中的堆栈分布
- 编译后程序运行时在内存中的堆栈分布
- Java中的堆栈
- java中的堆栈介绍
- java中的堆栈
- Java中的堆栈
- java中的堆栈
- java中的堆栈
- JAVA中的堆栈问题
- java中的堆栈
- Java中的堆栈
- 浅谈java中的堆栈
- java中的堆栈
- java中的堆栈
- java中的堆栈
- Java中的内存堆栈
- var_export 掉咋天
- HTTP协议 (七) Cookie
- 【cJson】 JSON格式详解
- 二叉搜索树的随机化插入和伸展插入操作(平摊法)
- 几种try catch finally组合
- Java中的运行时堆栈
- HDU Today 2112 (最短路+字符串转换)
- 获得多行UILabel的每一行内容
- LeetCode(83)Remove Duplicates from Sorted List
- 怎么把pdf电子书转换成txt格式
- nodejs+ajax实现数据交互
- C 几个优化方法
- 常用的排序算法C++
- 4710zipperdfs