JVMオプション-Xss-正確には何をしますか?


回答:


269

Javaアプリケーションの各スレッドには、独自のスタックがあります。スタックは、戻りアドレス、関数/メソッド呼び出し引数などを保持するために使用されます。そのため、スレッドが再帰アルゴリズムを介して大きな構造を処理する傾向がある場合、それらすべての戻りアドレスなどに大きなスタックが必要になる場合があります。Sun JVMでは、そのパラメーターを使用してサイズを設定できます。


11
したがって、-Xssオプションは、スタックが消費するメモリの量を制限するために使用され(戻りアドレス、変数などを格納することにより)、またスタックが取得できる深さを間接的に制限しますか?私は正しいですか?
instantsetsuna 2011

5
@instantsetsuna:より一般的な使用法はおそらくデフォルトの制限を増やすことだと思います。(常に制限があります。)しかし、はい、スタックのサイズを制御します。これは、スタックが取得できる深さを制御します。
TJクラウダー

Javaコンパイラ(別名javac)でこのXSS設定に相当する設定をどのように行いますか?クラスのコンパイルで大きなテール再帰を引き起こすscalaベースのライブラリーを使用する人にとっての問題– Andrew Norman 9秒前
Andrew Norman

@AndrewNorman:Javaランタイムオプションをクラスファイルにコンパイルしません。これは、環境固有のことです。本当にコードでそれを行う必要がある場合、必要なオプションを使用して実際のアプリケーションを起動することを唯一の仕事とする小さなメインクラスを書くことができます。
TJクラウダー

@AndrewNorman -Jflag構文(例:)を使用してコンパイラーが実行する必要があるJVM構成フラグを指定できます-J-Xss
francoisr

166

実際、JVMのスタックサイズを設定します。

次の2つの状況のいずれかで触れる必要があります。

  • StackOverflowError(スタックサイズが制限を超えています)、値を増やします
  • OutOfMemoryError:新しいネイティブスレッドを作成できませんスレッドが多すぎ、各スレッドに大きなスタックがあります)。

後者は通常、Xssの設定が大きすぎる場合に発生します-その後、バランスを取る必要があります(テスト中!)


3
必ずしも毎回とは限りません。SOEとOOMEの両方は、異なる方法で修正する必要があるさまざまな理由により発生する可能性があります。
noego

4
確かに、しかし私は-XssがSOEとOOMEの唯一の原因であるとは言いませんでしたが、逆に言えば-正しく設定しないと、2つのうちの1つを引き起こす可能性があります。
アダムAdamaszek

5

各スレッドには、ローカル変数と内部値に使用されるスタックがあります。スタックサイズは、呼び出しの深さを制限します。通常、これは変更する必要のあるものではありません。


4

私が間違っていない場合、これは、StackOverflowErrorを発行する前に、JVMが連続して受け入れる呼び出しの数を示すものです。一般的に変更したいものではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.