2013-06-20 30 views
1

我試圖檢查由於Java中的特定方法而導致的開銷。 說的方法是「發送(消息)」,我想「記錄(時間戳);發送(消息);日誌(時間戳)」,並找出時間戳之間的差異。問題在於該方法速度非常快(預期的差異在納秒內)。我也不想測量記錄時間戳的時間(除非它是微不足道的)。您能否推薦一種有效記錄時間戳的方法?通常相隔幾納秒的時間戳的低延遲日誌記錄

+1

此外,你可能想看看[卡尺](https://code.google.com/p/caliper/) – fge

回答

2

這樣做的最好方法是記錄方法調用之前的時間,然後調用方法數千乃至數百萬次並記錄結束時間。快速劃分會告訴你一次通話的總時間(這將非常小)。

由於JIT'ing請確保您以與生產中相同的方式測試該方法,或者您可能在實際環境中得到與測試中結果不同的結果。另外,您可能希望在開始時間測試之前運行該方法數千次,以確保您實際上正在運行完全優化的代碼。

+0

非常感謝wobblycogs和fge! –

0

如果你怕log開銷,解決辦法很簡單:因此

final long before, after; 

before = System.nanoTime(); 
send(message); 
after = System.nanoTime(); 

log("before: " + before); 
log("after: " + after); 

唯一的開銷左邊是調用System.nanoTime()。