Java堆和堆栈

时间:2014-11-29 19:51:31

标签: java heap-dump stackframe

我在下面的练习中遇到了问题,因为我无法参加已经解释过主题的课程。我试图在youtube上帮助自己一些视频,但它并没有让我对我的结果充满信心。如果有人帮我一点,我会非常感激。

给出了以下Java代码:

public class Programstructures {
    public static int f(int n, int m) {
        if (0 == n) {
        return m + 1;
        }
        if (0 == m) {
            return n + 1;
        }return m + n;
    }

    public static void main(String[] args) {
        if (0 < args.length) {
        int v = Integer.parseInt(args[0]);
        v = f(v, Integer.parseInt(args[1]));
        System.out.println(v);
        }
    }
}

a)调查给定程序中存在的所有变量和函数参数,无论它们是放在堆上还是放在堆栈上。

b)在函数f开始后概述堆栈的状态。

我得到了以下结果:

a)n,m,v:堆栈。 args []:堆。

b)我不确定。我在这里喜欢一些解释:/

提前致谢!

我不能把这个问题标记为家庭作业,对不起。

1 个答案:

答案 0 :(得分:0)

堆栈是存储函数的局部变量和参数的地方。如果a()调用b()b()调用c(),则其局部变量和参数(如果有)将存储在堆栈中。在这种情况下,a()的变量将首先出现,然后是b(),然后是c()。这使得从函数返回变得容易,因为当c()返回时,去掉它的局部变量和参数只意味着删除堆栈的最后部分。

基本上就是 - 一堆内存。无论何时创建对象,它都会存储在堆中的某个位置,直到完成并删除为止。

如果在函数中创建对象,则该对象将进入堆,但对该对象的引用将进入堆栈。