jprofiler"热点"视图是否正确地考虑了通过JNI调用的本机代码所消耗的CPU?

BD *_*ill 8 java jprofiler

我一直在使用JProfiler来分析一段通过JNI调用本机C代码的Java代码,我从"CPU视图"窗口得到了奇怪的结果.特别是,"调用树"选项卡上的信息告诉我,调用本机代码的Java方法占用运行时间的最大部分,但"热点"选项卡甚至根本不列出该方法.我也注意到org.joda.time类的一个类似的故事,据报道它有相当大的CPU但没有被报告为热点,我想知道这是因为他们花了很多时间调用原生日期转换代码.

任何洞察这个问题将不胜感激.

编辑:我刚刚发现了一篇非常令人不安的学术论文,题为"评估Java Profilers的准确性"(我会提供一个链接,但似乎科罗拉多大学服务器引用此文件的Google结果现在非常不满意,所以我不得不从谷歌的"快速查看"链接中删除一份副本.我怀疑本机方法的问题在于它们被过度计数,因为它们有很多调用,它们很短并且调用很可能导致屈服点; 但是,我不确定是否同样适用于时间转换例程.请注意,在同一测试运行中使用检测分析和采样分析时,我会得到明显不同的结果,并且检测结果与我的直觉更好地吻合.我推荐给那些曾经发现自己在分析运行结果上摸不着头脑的人.仍然希望有人能够获得更多关于此的信息; "剖析器错了"并不是一个非常令人欣慰的结果.

编辑2:看起来像colorado.edu已经整理出来,这里是链接:http://www-plan.cs.colorado.edu/klipto/mytkowicz-pldi10.pdf

Ing*_*gel 2

热点视图显示具有较大固有时间的方法。在调用树视图中,您可以在调用树的顶部看到总时间较长的方法。这些方法通常不是热点。

什么被视为“固有时间”取决于过滤器的配置方式。

请参阅此帮助主题以获得完整的解释。