3

VisualVM で CPU プロファイリングを行っており、コール ツリーで結果を確認しています。

メソッド自体 (Self 時間) と、メソッドから呼び出されるサブルーチンで費やされる合計時間 X を取るメソッドがあります。

サブルーチンで費やされた時間と Self 時間を合計すると、結果がメソッドで費やされた合計時間と等しくならないのはなぜですか? 私はミリ秒について話しているのではなく、50% または数分が不足していることに注意してください。

4

2 に答える 2

2

非常に浅い呼び出しツリーを持つ小さなプログラムを除いて、意味のあることを学ぶために「セルフタイム」を使用することは非常に困難です。

CPU のみの時間も、隠れた I/O に大部分の時間を簡単に費やしてしまう複雑なプログラムではあまり役に立ちません。

見たほうがいい

  • セルフタイムではなく、インクルーシブタイム
  • CPU時間ではなく壁時計
  • 絶対秒またはミリ秒ではなく、パーセントとして

関数やメソッドだけでなく、行レベルの解決策を取得することをお勧めします。

ここでは、時間が費やされている理由とその改善方法を見つけるために私が使用する方法と、それを使用して行われたことの例を示します。 ここでは、問題のより広範な議論を示します。

于 2012-08-27T13:14:37.137 に答える
0

合計時間と固有 (自己) 時間の両方が必要です...また、コール ツリーを避け、代わりに名前空間階層の観点 (パッケージ、クラス、メソッド、さらには動的タグとマーク) からクロック タイミングを確認する必要があります。

以下の一連の記事では、特に 2000 を超える巨大なスタックの深さと非常に短期間で数十億回のメソッド呼び出しを処理する場合に、徹底的なパフォーマンス調査がどのように行われるかを詳しく説明しています。

http://www.jinspired.com/solutions/case-studies/scala-compiler

各方法は、使用された他の方法の調査結果を検証するように見えることに注意してください...さらに重要なことに、単一の正しいパフォーマンス モデルはありません...求められているものと変更可能なものに応じて、多くの適切なパフォーマンス モデルがあります...私が知っている唯一の悪いパフォーマンスモデルは、このコンテキストでのサンプルベースのものですが、他に何もすることがなく、急いでいるときに少しの情報が役立ちます

于 2012-08-30T18:03:57.537 に答える