2013-03-06 1 views
8

JProfilerを使用して、JNI経由でネイティブCコードを呼び出すJavaコードを分析しています。「CPU Views」ウィンドウから奇妙な結果が得られています。特に、「呼び出しツリー」タブの情報は、ネイティブコードを呼び出すJavaメソッドが実行時間の最も長い部分を消費しているが、「ホットスポット」タブにはそのメソッドがまったくリストされていないことが示されています。私はorg.joda.timeクラスについても同様の話をしましたが、これはCPUのかなりの部分を占めていると報告されていますが、ホットスポットとして報告されていないことに気付きました。ネイティブ日付変換コード。jprofiler "Hot Spot"ビューは、JNI経由で呼び出されるネイティブコードが消費するCPUを正しく考慮していますか?

この問題についての洞察は高く評価されます。

EDIT:「Java Profilersの精度を評価する」という非常に厄介な学術論文を発見しました(私はリンクを提供しますが、このファイルのGoogle結果で参照されているコロラド大学のサーバのようです今、私はGoogleの「クイックビュー」リンクからコピーを取り下げなければならなかった)。私は、ネイティブメソッドの問題は、コールが多数あるため、オーバーカウントされていること、短く、コールが降伏点になる可能性があることです。しかし、同じことが時間変換ルーチンに当てはまるかどうかはわかりません。インストルメントされたプロファイリングとサンプルされたプロファイリングを同じテストランで使用すると、結果が大きく異なることに注意してください。インストゥルメントの結果は私の直感によく合います。プロファイリングの結果に頭を悩ませたことのある人には、このペーパーをおすすめします。それでも誰かがこれについてもっと多くの情報を持っていることを望んでいます。 「プロファイラが間違っている」というのは、非常に慰めの結果ではありません。

EDIT 2:http://www-plan.cs.colorado.edu/klipto/mytkowicz-pldi10.pdf

答えて

2

ホットスポットは、大きな固有の時間とショーメソッドを表示します。colorado.eduはここにリンクがあります、自分自身を整理しているように見えますコールツリービューでは、合計時間が長いメソッドがコールツリーの上部に表示されます。これらの方法は通常ホットスポットではありません。

「固有の時間」とは、フィルタの設定方法によって異なります。

詳しくは、this help topicを参照してください。