2009-05-05 4 views
10

考えられるのは、特定のJavaアプリケーションの最適なスタックサイズを決定するのに役立つはずです。実行中のある程度の時間が経過した後、Javaのスレッドが実際に使用するスタックサイズを取得できますか?

この情報を使用して実行できることの1つは、スレッドが終了するときに変更できるスタックサイズの範囲テーブルを作成し、定期的におよびアプリケーション終了時にダンプできることです。

EDIT:これは、プロファイラへのアクセスを取得できない実際の作業負荷を持つ顧客のマシンで実行されるというコンテキストです。

EDIT2:スレッドごとに(IIRC)256Kbで、私はしばらくの間、それが現実にどれだけ近いのか疑問に思っています(この質問があまり関係ないかもしれないのだろうか需要に応じてのスタック領域が割り当てられるためです)。我々は、メッセージの受け渡しと高度にスレッド化され、ARMのハンドヘルドからオクトーコアのLinux、中規模およびメインフレームまでのすべてのアプリケーションサーバーを提供しています。多数のメッセージハンドラーを持つシステム上のヒープのためのスタックスペース。

があり注目されているいくつかの同様の質問がありますが、彼らはネイティブ/ OS固有です:

+0

に関するより多くの情報を得ることだけ...自分で –

+7

@Tomを64ビットプラットフォームを取得:確かに...と私はちょうどに沿って私の顧客ごとに1つを買いますよ8ギガのRAMを搭載しているので、私が設計して書くソフトウェアについて考える必要はありません。 –

答えて

0

使用JConsole--あなたはおそらくすでにそれを持っています: http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html http://openjdk.java.net/tools/svc/jconsole/

+1

私はそれについて考えていましたが(実際はJVisualVMが優れています)、私はJProfilerを使用しています...これは、プロファイラへのアクセスが得られない実際のワークロードを持つ顧客のマシンで実行されるというコンテキストです。 –

+0

そして、与えられたスレッドのスタックサイズをどのように取得するのですか? –

1

スタックmエモリーは入手が難しいでしょう。

ベストは、できるだけ簡単に、MemoryMXBeanを介してJVMのメモリ使用です。

+0

もっと良いことはありますか? – Pacerier

0

新品VisualVMでもそうすることができると思います。

+0

5月5日のCugaの回答に対する私のコメントは次のとおりです。「実際にはJVisualVMが優れていると思っていましたが、私はJProfilerを使用していますが、これは私ができない実際の作業負荷プロファイラへのアクセス権を取得してください。 –

+0

興味深い - JVisualVMはJava 6にバンドルされています。また、Web経由でも配布されていることはわかりませんでした。プラグインは非常に便利です。 –

-1

Runtimeクラスを使用して、このようなJVMのmemmoryを監視できます。

Runtime rt = Runtime.getRuntime(); 
System.out.println((rt.freeMemory()/1024) + "/" + (rt.maxMemory()/1024) + " kB"); 

また、JConsole、JVisualVM e JInfoを使用することもできます。 あなたはこれらのツールHere:

http://java.sun.com/developer/technicalArticles/J2SE/monitoring/

+1

これはスタックサイズを教えてくれません。 –

+0

この方法では、JVMインスタンスのメモリ使用量のみを取得するか、現在のスレッドのメモリ使用量だけを取得できますか? – Eldius

関連する問題