2011-02-28 51 views
13

我的組件之一正在花費太多時間來執行。它調用大量的服務,然後調用多個dao方法。現在,有沒有什麼辦法來調用它調用的每種方法所花費的時間。
我不想在每個方法之前和之後編寫System.currentmillis以計算所需時間,因爲方法太多。
我想我可能需要使用攔截器或可能是任何探查器可以做到這一點。我不確定,請幫忙。如何找出哪種方法花費很多時間?

+1

我相信大多數IDE具有分析器功能內置。 – gigadot 2011-02-28 08:11:39

+0

@gigadot我正在使用eclipse – 2011-02-28 09:09:25

+0

不幸的是我是Netbeans的粉絲,但我想補充一點,profiler測量的時間只會給你一個相對的估計值。這不是在方法上花費的實際時間。分析器需要將自己附加到方法並導致額外的開銷。 – gigadot 2011-02-28 17:46:25

回答

7

使用jvisualvm這應該與JDK(如果我沒有記錯的話)。它是您的JVM的GUI,並且具有非常好的功能。看看它的features有一些截圖,以及...

而且你可以按照以下步驟將其整合爲發射在Eclipse Steps to integrate in eclipse

+0

我正在使用這個,但是無論是我無法找到顯示方法所用時間的位置,或者它沒有顯示時間。 – 2011-03-01 09:29:36

+1

在運行應用程序時,應該激活cpu和內存分析器/採樣器。那麼你會積極地看到熱點。一旦執行結束,它會組裝一個非常整齊的報告,您可以監督軟件阻塞的不同部分。 (見:http://visualvm.java.net/images/profiler.jpg)希望有所幫助。 – posdef 2011-03-01 10:27:20

0

它別看,與測量時間來發現問題。

用其緩慢來暴露它。 只要使用與無限循環相同的方法即可。

也就是說,在緩慢的時候暫停幾次,並且每次檢查每個線程的調用堆棧。 有罪的方法和代碼行將出現在多個樣本上。 檢查last paragraph of this post

Here's more on how it works.