我來寫下面的代碼:生成一個StackOverflow的異常之前迭代構造記憶混亂
public class foo {
static int iterationCounter = 0;
public foo() {
iterationCounter++;
System.out.println(iterationCounter);
new foo();
}
public static void main(String[] args) {
new foo();
}
}
,取得了價值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及其所有屬性存儲在堆棧中)?
也許一些尾遞歸優化? –