2012-07-20 46 views
7

我一直对时间感兴趣,因为我的简单游戏需要运行,因此我使用了Netbeans Java Profiler(Java 1.7),并且可以在“热点”选项卡中看到“Self Time”和“Invocations”列。Netbeans分析器的“自我时间”实际上意味着什么?

例如,我的渲染方法有:

自用时间 1025毫秒

的调用:2311

所以,如果我理解不错,它实际上意味着TOTAL ALL渲染方法调用的时间总计为1025毫秒,一个方法执行的平均时间为1025/2311 = 0,44毫秒

如果是这样,我可以强制IDE显示平均时间而不是总时间?

+1

如果您的目标是减少总数,为什么要显示平均值? – 2012-07-20 15:10:39

+3

那么,如果我在一个方法中实现了一个游戏循环,我可能会想看看一次执行(帧)需要多少时间... – 2012-07-20 15:28:29

+0

是的,您需要划分。然而,在检测模式下运行profiler(或者实际上,运行它)会影响​​性能(如阻止JIT优化),并且不是非常有用。手动计时/基准测试(例如,调用System.nanoTime)可能会更好,但也存在问题。 – 2015-04-02 18:23:39

回答

19

通常情况下,“自我时间”度量方法体内所花费的时间 - 不包括所调用方法所花费的时间。例如,假设你有一个简单的方法来检索排序的用户,,它调用了两个方法,它们本身没有任何其他调用。

UserList getUsers() { 
    return sortUsers(loadUsers()); 
} 

由于确实没有工作,其自身的时间将是非常低的,即使调用该方法是昂贵的。

Method  Self Time Call Time 
----------- --------- --------- 
getUsers   3 ms 1,184 ms 
loadUsers  923 ms  923 ms 
sortUsers  258 ms  258 ms 

这是基于我用过的其他配置文件 - 而不是NetBeans。希望有人可以证实或否认NetBeans本身。

+2

注意:内联的方法将计入*父母的*自我时间,不会被报告。除非配置文件的存在导致JIT取消内联这些方法,否则您会看到整体性能下降。探查器对于了解核心时间关键型方法的性能并不是非常有用。微代码标记(即,没有涉及分析器)比较好,但要做正确的操作很困难。 – 2015-04-02 18:20:20

相关问题