2012-07-20 43 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

相關問題