Yourkit 8.0を使用して、Mac OS X(10.5.7、Apple JDK 1.6.0_06-b06-57)で実行されている数学的に集中的なアプリケーションのプロファイリングを行っていますが、CPUプロファイリングの結果に奇妙な動作が見られます。
たとえば、サンプリングを使用してプロファイリングを実行したところ、アプリケーションの10分間の実行時間の40%がStrictMath.atanメソッドに費やされたことが報告されました。私はこれが不可解であることに気づきましたが、私はそれを一言で理解し、atanを非常に単純な多項式フィットに置き換えるのに少し時間を費やしました。
アプリケーションを再度実行すると、以前とほぼ同じ時間(10分)かかりましたが、アタンの交換はプロファイリング結果のどこにも表示されませんでした。代わりに、他の主要なホットスポットの実行時の割合は、それを補うために単純に増加しました。
要約する:
StrictMath.atanの結果(ネイティブメソッド)
合計実行時間:10分
メソッド1:20%
メソッド2:20%
メソッド3:20%
StrictMath.atan:40%
単純化された純粋なJavaatanの結果
合計実行時間:10分
方法1:33%
方法2:33%
方法3:33%
(メソッド1、2、3はatan呼び出しを実行しません)
この振る舞いはどうなっているのでしょうか?EJ-TechnologiesのJProfilerを使用しても同じ結果が得られました。JDKプロファイリングAPIは、少なくともOS Xでは、ネイティブメソッドの不正確な結果を報告しているようです。