web-dev-qa-db-ja.com

JvisualVMのサンプラーとプロファイラーの違いは何ですか?

JvisualVMには2つのプラグインがあり、1つはサンプラー、もう1つはプロファイラーです。

また、UIが似ていることもわかりましたが、結果には大きな違いがあります。違いは何ですか?

そして、なぜ彼らは大きな違いがあるのですか?

23
Jason

一般に:

プロファイラーは常に実行されているため、完全なコールスタックが得られます。任意の時点で。

サンプラーは、特定の時点でのみ「スナップショット」を取得します。

ことは、すべてを「プロファイリング」すると、JVMが大幅に遅くなることです。数秒で巨大量のデータが作成されます。考えてみてください。プロファイラーはeach and anyメソッドの呼び出しを記録します!

そのため、通常、アプリケーション内で何が行われているのか「わからない」ときに、最初にサンプラーを使用します。そして、サンプルが何かを教えてくれることを願っています。 「ねえ、私たちの10 000のサンプルの中では、ほとんどの場合、その1つの方法ですが、なぜですか?」しかし、何を「探しているか」について理解が深まったら、何らかのプロファイラにつながるコールチェーン全体をキャプチャするために、完全なプロファイラの実行を試みます。

そして、いくつかの「中間」-「すべて」をプロファイリングしますが、除外するものがあります。言い換えると、ほとんどのプロファイラーでは、「このパッケージまたはそのパッケージのクラスでnotプロファイルメソッドを実行する」と言うことができます。ただし、もちろん-パッケージ/階層を除外することは、調査する方向がすでにかなりよくわかっている場合にのみ意味があります。