Netbeans 分析器的“自我时间”实际上是啥意思?
Posted
技术标签:
【中文标题】Netbeans 分析器的“自我时间”实际上是啥意思?【英文标题】:What does Netbeans profiler's "Self Time" actually mean?Netbeans 分析器的“自我时间”实际上是什么意思? 【发布时间】:2012-07-20 14:48:32 【问题描述】:我对我的简单游戏需要运行的时间感兴趣,因此我使用了 Netbeans Java 分析器 (Java 1.7),我可以在“热点”选项卡中看到“自我时间”和“调用”列。
比如我的渲染方法有:
自拍时间:1025 毫秒
调用:2311
所以,如果我理解得很好,这实际上是否意味着所有渲染方法调用的总时间总计为 1025 毫秒,而一个方法执行的平均时间为 1025 / 2311 = 0,44 ms?
如果是这样,我可以强制 IDE 显示平均时间而不是总时间吗?
【问题讨论】:
如果您的目标是减少总数,为什么要显示平均值? 好吧,如果我在一个方法中实现了一个游戏循环,我可能想看看一个执行(帧)需要多少时间...... 是的,你需要分割。但是,在检测模式下运行分析器(或者实际上,完全运行它)会影响性能(例如阻止 JIT 优化),并且不是非常有用。手动计时/基准测试(例如,调用 System.nanoTime)可能会更好,但也充满了问题。 【参考方案1】:通常,“自我时间”衡量在方法体中花费的时间——不包括在它调用的方法中花费的时间。例如,假设您有一个简单的方法来检索已排序的用户,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 取消内联这些方法,否则您将看到整体性能下降。分析器对于了解核心、时间关键方法的性能不是很有用。微基准测试(即,不涉及探查器)更好,虽然正确地做起来很棘手。以上是关于Netbeans 分析器的“自我时间”实际上是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
the hash for the file is not present in the specified catalog file,是啥意
Netbeans IDE 怎么设置背景图片?如果是代码是啥?