我在VisualVM中进行CPU分析,并在调用树中查看结果。
我有一些方法,花费总时间X,花费在方法本身(自我时间)和从方法调用的子程序中。
当我将在子程序中花费的时间加上自我时间加起来时,为什么结果不等于在方法中花费的总时间?请注意,我不是在谈论毫秒,而是在余额中缺少50%或几分钟。
答案 0 :(得分:1)
除了在非常浅的调用树的小程序中,使用“自我时间”来学习任何有意义的东西是非常困难的。
在任何类型的复杂程序中,仅CPU时间也不是很有用,它很容易在隐藏的I / O中花费大量时间。
最好看看
获得行级解析更好,而不仅仅是函数或方法。
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
请注意,每种方法都会验证所使用的其他方法的结果......更重要的是,没有单一的正确性能模型......根据所询问的内容和可以更改的内容,有许多正确的性能模型。 ..我所知道的唯一一个糟糕的表现模式就是基于这种情境的样本,虽然当你没有别的事可做时,匆忙中任何一小部分信息都有帮助