我在 VisualVM 中进行 CPU 分析,并在调用树中查看结果。
我有一些方法,总时间 X,花费在方法本身(Self time)和从方法调用的子程序中。
当我将在子例程中花费的时间加上 Self 时间时,为什么结果不等于在方法中花费的总时间?请注意,我说的不是毫秒,而是余额中少了 50% 或几分钟。
最佳答案
除了在调用树非常浅的小程序中,很难利用“自学时间”来学习任何有意义的东西。
纯 CPU 时间在任何类型的复杂程序中也不是很有用,这些程序很容易将大部分时间花在隐藏的 I/O 上。
最好看看
- 包容的时间,而不是自己的时间
- 挂钟,不是 cpu 时间
- 百分比,而不是绝对秒数或毫秒数
更好的是获得行级分辨率,而不仅仅是函数或方法。
Here's the method我用来找出为什么要花费时间以及如何改进它,以及 here's an example用它做了什么。 Here's a more extensive问题的讨论。
关于java - 为什么 VisualVM 中的 CPU 时间不加起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140126/