Netbeans分析器&x27;s";“自我时间”;实际上是什么意思?

Netbeans分析器&x27;s";“自我时间”;实际上是什么意思?,netbeans,profiling,Netbeans,Profiling,我一直对我的简单游戏需要运行的时间感兴趣,所以我使用了Netbeans Java profiler(Java 1.7),我可以在“热点”选项卡中看到“自我时间”和“调用”列 例如,我的渲染方法具有: 自身时间:1025毫秒 调用:2311 那么,如果我理解得很好,它是否真的意味着所有渲染方法调用的总时间加起来为1025 ms,一个方法执行的平均时间为1025/2311=0,44 ms 如果是这样的话,我可以强制IDE显示平均时间而不是总时间吗?通常,“self-time”度量在方法体中花费的时间

我一直对我的简单游戏需要运行的时间感兴趣,所以我使用了Netbeans Java profiler(Java 1.7),我可以在“热点”选项卡中看到“自我时间”和“调用”列

例如,我的渲染方法具有:

自身时间:1025毫秒

调用:2311

那么,如果我理解得很好,它是否真的意味着所有渲染方法调用的总时间加起来为1025 ms,一个方法执行的平均时间为1025/2311=0,44 ms

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

通常,“self-time”度量在方法体中花费的时间——不包括在它调用的方法中花费的时间。例如,假设您有一个简单的方法来检索已排序的用户,
getUsers
,该方法调用了两个本身不进行任何其他调用的方法

UserList getUsers() {
    return sortUsers(loadUsers());
}
由于
getUsers
不起作用,因此它的自时间将非常低,即使调用该方法很昂贵

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

这是基于我使用过的其他配置文件,而不是NetBeans。希望有人能证实或否认NetBeans本身的这一点。

如果你的目标是减少总数,为什么要显示平均值?好吧,如果我在一个方法中实现了一个游戏循环,我可能想看看一次执行(帧)需要多少时间……是的,你需要划分。但是,在插装模式下运行探查器(或者,实际上,根本不运行它)会影响性能(例如防止JIT优化),并且用处不大。手动计时/基准测试(例如,调用System.nanoTime)可能更好,但也充满了问题。注意:内联的方法将计入父级的自时间,不会被报告。除非分析器的存在导致JIT取消内联这些方法,否则您将看到总体性能下降。探查器对于理解时间关键型核心方法的性能不是很有用。微基准标记(也就是说,不涉及剖析器)更好,尽管很难做到正确。