为什么VisualVM中的CPU时间不加起来?

时间:2012-08-27 10:19:59

标签: java profiling visualvm

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

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

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

2 个答案:

答案 0 :(得分:1)

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

在任何类型的复杂程序中,仅CPU时间也不是很有用,它很容易在隐藏的I / O中花费大量时间。

最好看看

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

获得行级解析更好,而不仅仅是函数或方法。

Here's the method我用它来找出为什么花费时间以及如何改进它,以及here's an example已经完成的工作。 Here's a more extensive讨论问题。

答案 1 :(得分:0)

你需要总时间和固有(自我)时间......你也应该避免调用树,而是从命名空间层次结构的角度来看待时钟定时(包,类,方法,甚至是动态标签和标记)< / p>

以下是一系列文章,详细介绍了彻底的性能调查,特别是在非常短的时间内处理超过+2000和十亿次方法调用的大量堆栈深度时:

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

请注意,每种方法都会验证所使用的其他方法的结果......更重要的是,没有单一的正确性能模型......根据所询问的内容和可以更改的内容,有许多正确的性能模型。 ..我所知道的唯一一个糟糕的表现模式就是基于这种情境的样本,虽然当你没有别的事可做时,匆忙中任何一小部分信息都有帮助