私は次のコードを書くようになりました:
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 はfoo オブジェクトx
を作成するためにメモリ量を確保しました。11472
ただし、次のコードは、他のプログラムとは異なるログを出力します。
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 とそのすべてのプロパティをスタックに格納していますか)?