Java中的运行时堆栈
来源:互联网 发布:淘宝抢购秒杀器下载 编辑:程序博客网 时间:2024/05/16 09:55
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
0 0
- Java中的运行时堆栈
- Java中的运行时堆栈
- 编译后程序运行时在内存中的堆栈分布
- 编译后程序运行时在内存中的堆栈分布
- Java中的堆栈
- java中的堆栈介绍
- java中的堆栈
- Java中的堆栈
- java中的堆栈
- java中的堆栈
- JAVA中的堆栈问题
- java中的堆栈
- Java中的堆栈
- 浅谈java中的堆栈
- java中的堆栈
- java中的堆栈
- java中的堆栈
- Java中的内存堆栈
- kettle报Unable to save shared ojects错误
- Ubuntu 12.04 VNC server 5.0.x [RealVNC] 的配置和使用
- 常用23种设计模式总结,UML图、意图和适用性
- python 使用ioctl() 获得网卡IP 和MAC地址
- *高通camera基本代码架构
- Java中的运行时堆栈
- C#socket资料汇总
- 关键字 strong、week
- 更改点后输出把集合里的点通过树的边连在一起所需要的最小代价 LCA+树状数组 HDU 5296 Annoying problem
- 论文笔记 《Deep Neural Networks for Object Detection》
- 后端分布式系列:分布式存储-HDFS NameNode 设计实现解析
- scott用户添加debug权限
- android网络编程所涉及到的知识
- iOS学习——ScrollView图片轮播和同类控件优先级问题