3

私は最近、2000 の再帰関数呼び出しを含むディープ スタックを調べていましたが、Java のスタック内の関数呼び出しの数に制限がどのように定義されているのか疑問に思っていました。

4

2 に答える 2

5

制限は、各スレッドに割り当てられるスタック メモリの最大量に基づいています。-Xss JVM 引数を使用して、この制限を構成できます。詳細については、次のリンクを参照してください。

ホットスポットに関するよくある質問

Xss を使用して Java のデフォルト スレッド スタック サイズを調整する

于 2011-08-10T12:01:06.733 に答える
1

他の人が言うように、それは JVM が利用できるメモリの数に依存します。

関数とそのメモリ消費量がわかっている場合(そしてこれは大きな場合です)、理論的にはメモリから関数呼び出しの数を計算できます。(最適化されていない) 再帰関数はすべてのローカルとパラメーターをスタックに配置する必要があるため、これは関数に大きく依存します。つまり、スタック上に locals がなく 1 つの int パラメーターを持つ X 関数を取得すると、2 つの int パラメーターと 2 つの int ローカル変数を持つ X 関数を取得すると、X/4 のみが取得されます (例外として、他のスタック フレームのオーバーヘッドを無視すると、アドレスが返されます。. ..)。

于 2011-08-10T12:06:49.120 に答える