以下各节包含评估 Profiler 提供的结果时要考虑的信息:
要计算根节点的自用时间,Profiler 将从根节点的总时间中减去所有子节点的时间。
因此,未分析的子节点的时间会反映在根节点的自用时间中。如果根节点的自用时间很长,则应该查明原因。您可能没有分析适当的方法,因此导致您处理的位置不当。
例如,假设方法 A 调用方法 B。
方法 A 总耗时为 10 秒(这里总时间包括调用方法 B 的时间),并且调用方法 B 总耗时也为 10 秒。
如果分析了方法 A 和 B,则调用栈会反映出该信息。您将看到,方法 A 的自用时间为 0秒,而方法 B 的自用时间为 10 秒(这 10 秒实际上是在方法 B 中花费的)。但是如果未分析方法 B,则只会看到调用方法 A 耗时 10 秒,并且 A 的自用时间为 10 秒。因此,您可能认为问题就是出在方法 A 中,而不是方法 B 中。
需特别指出的是,您在最初编译 JSP 期间,会注意到 JSP 的自用时间很长。如果您重置收集的结果,然后再重新显示该页,则自用时间将会显著减少。
因为 Java 分析策略中存在某些限制,所以 this() 或 super() 的初始调用将显示为构造函数调用的同级调用,而不是子级调用。请参见以下示例:
class A
{
public A()
{
this(0);
}
public A(int i)
{
}
}
and:
class B
{
public static void test()
{
new A();
}
}
The call tree will look like this:
B.test()
-A.<init>(int)
-A.<init>()
Rather than this:
B.test()
-A.<init>()
-A.<init>(int)
|
不要被表面上许多 Identity Manager 守护线程(如 ReconTask.WorkerThread.run() 或 TaskThread.WorkerThread.run())所耗费的大量时间所误导。其中大部分时间是在休眠(等待事件)中度过的。必须仔细研究这些情况,以了解这些线程在处理事件时实际使用的时间。