2017-04-04 26 views
2

我有具體的麻煩性能,因此開始分析我的應用程序,我看到JProfiler的疑惑統計 - Thread.run具有的CPU時間達20%,在調用樹分析,去內心呼叫不代表他的時間(大部分接近0%)。似乎行Thread.run本身佔用20%..Thread.run需要大量的CPU時間探查日誌

這意味着什麼,也許在某個地方線程創建的開銷?請指教

enter image description here

+0

你是否在旋轉方法的某個地方等待? – Fildor

+0

nope,沒有等待,沒有睡覺 – Fagoter

+1

Thread.run沒有做任何事情,更有可能這是分析器中的帳戶中的錯誤。線程創建中的開銷並不是由任何我知道的分析器來衡量的,因爲它在線程啓動之前在本地代碼中發生。你是否創造了很多非常短暫的線程?如果是這樣,請改用線程池。現在,我很少直接創建線程並創建線程池,即使它只有一個。 –

回答

3

由一個線程調用的run方法總是異形,而不管是否對Runnable的類進行概要分析。

從那裏,一切都交給了調用樹過濾器配置相匹配的一流變成的run方法的自我時間的一部分。

要查看所有類別,用「取樣」作爲調用樹記錄方法,選擇下一個「禁用所有過濾器」複選框,將「採樣」,在剖析設置的設置。

+0

儘管如此,但這並不能解釋null條件和方法調用如何使用高百分比的cpu。 –

+0

在我看來,這只是關於閱讀性能分析結果的混淆。一旦我們看到代碼和剖析器的屏幕截圖 – paranoidAndroid

+0

@PeterLawrey請看我上面的評論 –