Java中的运行时堆栈

来源:互联网 发布:淘宝抢购秒杀器下载 编辑:程序博客网 时间:2024/05/16 09:55

Java中的运行时堆栈

本文主要介绍Java中的运行时堆栈和Java方法调用的过程,如有疑问,欢迎讨论。


Java中方法的调用过程


首先用一张图来展现Java中整个方法的调用流程。

这里写图片描述

注意:在以下的叙述中,正在运行的系统将采用运行时系统来统称

在上面这张图中,我们能够很清晰的看到方法的调用过程,当一个方法被调用时:

  1. 首先,运行时系统会调用一条语句来创建一个活动记录,活动记录包括了调用该方法时的实参列表、方法内的局部变量和对象以及一个返回地址。
  2. 然后,运行时系统会将活动记录压入运行时堆栈,接着执行被调用方法的方法体。
  3. 最后,在方法体内的语句执行完成后,运行时系统会读取活动记录中的返回地址,同时将该活动记录弹出运行时堆栈。
  4. 最终,运行时系统从取得的返回地址处继续执行程序。

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