JProfilerを使用してJNI経由でネイティブCコードを呼び出すJavaコードを分析してきましたが、[CPUビュー]ウィンドウから奇妙な結果が得られます。特に、[Call Tree]タブの情報によると、ネイティブコードを呼び出すJavaメソッドは実行時間の大部分を消費しますが、[HotSpots]タブにはそのメソッドがまったく表示されません。また、org.joda.timeクラスについても同様の話に気づきました。これは、CPUのかなりの部分を占めると報告されていますが、ホットスポットとしては報告されていません。これは、呼び出しに多くの時間を費やしているためだと思います。ネイティブの日付変換コード。
この問題についての洞察をいただければ幸いです。
編集:「Javaプロファイラーの精度の評価」というタイトルの非常に不穏な学術論文を発見しました(リンクを提供しますが、このファイルのGoogleの結果で参照されているコロラド大学のサーバーは現在非常に不幸なようです。 Googleの「クイックビュー」リンクからコピーを取得する必要がありました)。ネイティブメソッドの問題は、呼び出しが多く、短く、呼び出しが降伏点になる可能性があるため、過大評価されていることだと思います。ただし、同じことが時間変換ルーチンに適用されるかどうかはわかりません。同じテスト実行でインストルメント化されたプロファイリングとサンプル化されたプロファイリングを使用すると、結果が大幅に異なり、インストルメント化された結果は私の直感とよく一致することに注意してください。プロファイリングの実行結果に頭を悩ませたことがある人には、このペーパーをお勧めします。それでも誰かがこれについてもっと情報を持っていることを望んでいます。「プロファイラーが間違っている」というのは、あまり心地よい結果ではありません。
編集2:colorado.eduが自分自身を整理したように見えます、ここにリンクがあります:http ://www-plan.cs.colorado.edu/klipto/mytkowicz-pldi10.pdf