您的位置:首页 > 编程语言 > Java开发

Java中的运行时堆栈

2015-08-20 11:40 447 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息