3

我正在 VisualVM 中进行 CPU 分析并查看调用树中的结果。

我有一些方法,总时间 X 花费在方法本身(自时间)和从方法调用的子例程中。

当我将子程序花费的时间加上 Self 时间时,为什么结果不等于方法花费的总时间?请注意,我不是在谈论毫秒,而是在余额中缺少 50% 或几分钟。

4

2 回答 2

2

除了在调用树非常浅的小程序中,使用“自学时间”来学习任何有意义的东西是非常困难的。

CPU-only time 在任何类型的复杂程序中也不是很有用,它们很容易将大部分时间花在隐藏的 I/O 上。

最好看看

  • 包括时间,而不是自我时间
  • 挂钟,不是cpu时间
  • 作为百分比,而不是绝对秒数或毫秒数

获得行级分辨率会更好,而不仅仅是函数或方法。

下面是我用来找出为什么要花费时间以及如何改进它的方法,下面是一个使用它的示例这是对这些问题的更广泛讨论。

于 2012-08-27T13:14:37.137 回答
0

您需要总时间和固有(自身)时间...您还应该避免调用树,而是从命名空间层次结构的角度(包、类、方法,甚至动​​态标签和标记)查看时钟时序

这是一系列文章,详细介绍了彻底的性能调查是什么样子,尤其是在处理超过 +2000 的巨大堆栈深度和在很短的时间内进行十亿次方法调用时:

http://www.jinspired.com/solutions/case-studies/scala-compiler

请注意,每种方法都旨在验证所使用的其他方法的结果……更重要的是,没有单一的正确性能模型……有许多正确的性能模型取决于所询问的内容和可以更改的内容……我所知道的唯一糟糕的性能模型是在这种情况下基于样本的模型,尽管当您无事可做并且匆忙时,任何一点信息都会有所帮助

于 2012-08-30T18:03:57.537 回答