我来写以下代码:
public class foo {
static int iterationCounter = 0;
public foo() {
iterationCounter++;
System.out.println(iterationCounter);
new foo();
}
public static void main(String[] args) {
new foo();
}
}
在生成 StackOverflow 异常之前,最后一个由该值组成的日志iterationCounter
是:11472
,因此 Java 留出x
一定量的内存来创建11472
foo 对象。
然而,以下代码输出的日志与其他程序不同:
public class foo {
static int iterationCounter = 0;
foo fooObject;
public foo() {
iterationCounter++;
System.out.println(iterationCounter);
this.fooObject = new foo();
}
public static void main(String[] args) {
new foo();
}
}
这是我对内存管理的困惑。我以为 的值iterationCounter
会与其他程序的值相同,但这次的值是9706
。由于fooObject
是一个公共变量(一个字段),它应该存储在堆内存中(不是这样吗?)而不是堆栈内存。如果是这种情况,它不应该占用堆栈空间(或者正在将所有新创建的 fooObjects 及其所有属性存储在堆栈中)?