Java プログラムで StackOverflowError が発生した場合、ランタイム コール スタックが制限を超えたことを示します。この問題に対処するには、java -Xss コマンドライン フラグを使用して JVM のスタック サイズを増やすことができます。より大きな値を指定すると、スタック フレームの深さを増やすことができます。
サンプル プログラム TT で示されているように、-Xss を 4m に増やすと、fact(1
ただし、同じ入力と -Xss フラグを使用して複数の実行を行うと、異なる結果が得られる場合があるため、スタック要件は完全に決定的ではないことに注意してください。結果。この非決定的な動作は、ガベージ コレクションや JIT コンパイルなどの要因の影響を受ける可能性があります。
大規模なランタイム スタックが必要な場合は、スタック サイズの増加だけに依存するのではなく、アルゴリズムを最適化してスタックの使用量を削減することをお勧めします。 。データをスタックではなくヒープに保存するため、再帰関数の代わりに反復関数の使用を検討できます。たとえば、提供されている階乗関数の反復バージョンでは、再帰呼び出しの代わりにループを使用して値を反復処理します。
または、Thread() コンストラクターを使用して単一スレッドのスタック サイズを増やすこともできます。スタックサイズが大きくなります。これにより、メモリを必要としないスレッドにメモリが浪費されることがなくなります。
注: java -Xss フラグは実装に依存しており、ここで説明する動作は JVM 実装によって異なる場合があります。正確な情報については、必ず特定の JVM ドキュメントを参照してください。
以上がStackOverflowErrors を防ぐために Java スタック サイズを増やすにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。