2012-06-14 11 views

答えて

9

スレッドスタックに割り当てられるメモリ量は、JVMバージョン+オペレーティングシステム固有のものです。これは、-XX:ThreadStackSizeオプション(古いバージョンでは-Xss)で構成されています。ちょうど512KBは「普通」ですが、64ビットLinuxでは1024ですが、これはおそらく最も重要なプラットフォームです(とにかく1人の意見です)

+0

これはThreadStackSizeで、デフォルトでは512KB(32ビット)ですが、このメモリは作成時にトレッド用に予約されているのですか、メソッド呼び出しがネストされると動的に消費されますか? – Ranger

+0

予約されています。つまり、プラットフォームにも依存しますが、基本的にオペレーティングシステムがメモリを提供できるかどうかを保証できない場合は、スレッドの作成時にOOM例外が発生します。 (メモリを提供できるのはもちろんアプリケーションデータをスワップ空間に強制することを含むかもしれません)。これは、基礎となるmalloc操作の契約に関連しています。これはすべて、現代のJVMとネイティブ・バインド・スレッドを前提としています。インタプリタで起こることは、JVMのビジネスです。 – Affe

+1

また、linuxにはメモリの制限に依存しないユーザースレッドの上限があることを覚えておいてください。 Javaの「メモリ不足:ネイティブスレッドを作成できません」必ずしも実際に物理RAMが不足していたことを示すものではありません。 – Affe

2

Javaアプリケーションの各スレッドには、独自のスタックがあります。スタックは、戻りアドレス、関数/メソッド呼び出し引数などを保持するために使用されます。によって、デフォルトのスタックサイズは512KBです。 -Xss jvmコマンドで変更できます。

java -Xss128k 
関連する問題