【发布时间】:2009-07-07 23:48:54
【问题描述】:
我一直在使用 Yourkit 8.0 分析在 Mac OS X(10.5.7,Apple JDK 1.6.0_06-b06-57)下运行的数学密集型应用程序,并注意到 CPU 分析结果中有一些奇怪的行为。
例如 - 我使用采样进行了分析运行,它报告应用程序的 10 分钟运行时间中有 40% 用于 StrictMath.atan 方法。我觉得这很令人费解,但我信以为真,花了一些时间用一个极其简单的多项式拟合替换 atan。
当我再次运行该应用程序时,它所用的时间几乎与以前完全相同(10 分钟) - 但我的 atan 替换在分析结果中没有出现。相反,其他主要热点的运行时间百分比只是增加来弥补。
总结一下:
StrictMath.atan 的结果(本机方法)
总运行时间:10 分钟
方法一:20%
方法二:20%
方法三:20%
StrictMath.atan:40%
使用简化的纯 Java atan 的结果
总运行时间:10 分钟
方法一:33%
方法二:33%
方法三:33%
(方法 1,2,3 不执行任何 atan 调用)
知道这种行为是怎么回事吗?我使用 EJ-Technologies 的 JProfiler 得到了相同的结果。似乎 JDK 分析 API 报告了本机方法的不准确结果,至少在 OS X 下是这样。
【问题讨论】:
-
如果
atan是一个内在函数,我不会感到惊讶 - 不是调用方法,而是内联注入等效的机器代码。 -
我在 Mac OS X 10.7(以及更早的版本)上使用 StrictMath 中的各种方法也遇到过这种情况。
-
那么有没有办法解决这个问题?
标签: java macos profiling native yourkit