プリミティブのみがスタックメモリに格納され、オブジェクトはヒープメモリに格納されていることを読んでいます。次のプログラムでは、stackoverflowエラーが発生する前に最大スタックサイズを確認するメソッドを再帰的に呼び出しています。ここでメソッドのHashsetオブジェクトを作成すると、Javaのスタックメモリが減少する
public class MaxStackSize {
static int i =0;
public static void main(String[] args) {
method1();
}
public static void method1()
{
i++;
System.out.println(i);
method1();
}
}
最大出力 'i' は53481.
である私はメソッドにHashSetのオブジェクトを追加し、それを移入した場合のために:
public class MaxStackSize {
static int i =0;
public static void main(String[] args) {
method1();
}
public static void method1()
{
HashSet<String> set = new HashSet<String>();
set.add("one");
set.add("two");
set.add("three");
set.add("four");
set.add("five");
set.add("six");
set.add("seven");
set.add("eight");
set.add("nine");
i++;
System.out.println(i);
method1();
}
}
を 'I' の最大出力は25403です
両方の場合、VM argは-Xss5mです。
プリミティブのみがスタックに格納されている場合、なぜHashSetのオブジェクトが作成されると、スタックサイズが小さくなるのですか?
あなたは 'method1()'を再帰的に呼び出しています。それがなぜ 'HashSet'ではなく増加しているのでしょうか? – msagala25