2017-09-17 12 views
1

更新

この質問をする別の方法は、「コアがあるよりも多くのスレッドをアプリケーションに使用できるかどうか」です。VisualVM自体にVisualVMが50個のスレッドを実行しているのはなぜですか?

元の質問

私のラップトップには合計8個のコアがあります。 VisualVMの最新バージョンをダウンロードし、VisualVMタブをクリックして、それがどのように実行されているかを確認してください。私が気づいたことの1つは、32個のライブスレッドと22個のデーモンスレッドを使用していることです。それはなぜそれほど多くを使用していますか? IIUCは8よりも効率が悪く、IIUCは自分のコア数を知っているので、スレッド数を8に制限することができます。私は少し違ったことを尋ねています。 VisualVMの特定の機能を使用する方法は問いません。私は8以上のスレッドを実行している理由を質問しています。なぜなら、IIUCは8以上が最適でなく、VisualVMはOracleから来るので、最適に機能するように設計していると思っていました。またはOracleは、実行する必要があるよりも多くのスレッドで実行できるようにしていますか?

+1

[Visual VMでのプロファイリングの制限](https://stackoverflow.com/questions/770851/limiting-profiling-in-visual-vm)の可能な複製 – IddoE

+0

「プロファイルされたスレッドの制限。常に32」https:// blogs.oracle.com/nbprofiler/profiling-with-visualvm,-part-2 – IddoE

答えて

1

VisualVMの実行スレッドが50個あるだけであるため、必ずしもすべてのスレッドが同時にアクティブに動作しているとは限りません。 「実行中」の列をソートすると、最初の7または8スレッドだけがアクティブに実行されていることがわかります。残りのスレッドはスリープしているか、またはI/Oを待っています。

+0

余分なスレッドが何をしているのかが分かると、「I/Oを待っている」というのは正しい方向ですが、まだ曖昧です。 – javadba

+0

あなたの答えは理にかなっています。しかし、現在のJavaソリューションの設計方法についての私の理解に基づいて、設計上の欠陥のように見えます。オラクルはこれを作って以来、私は彼らが私が何かを知っているかどうか疑問に思います。特に、私はなぜアプリケーション全体で最大8スレッドの共有エグゼキュータプールを使用していないのだろうと思っています - 彼らがやっていることをやることにいくつかの利点がありますか? – Ole

+0

コア数よりもスレッド数が多いことは間違いありません。実際にはOracleだけでなく標準的な方法です。利点は、言ったように、そのスレッドが現在I/Oなどを待っているために1つのCPUコアが解放されても、アイドル状態ではなく他のスレッドを処理できます。 – VHS

関連する問題