2012-02-25 54 views
1

我有一個簡單的類,我想測量方法調用時間,我該怎麼做?尋找通用的方法來實現這一點,所以我可以將它應用於更困難的類。謝謝java我如何測量方法調用時間?

import java.io.*; 
import java.util.*; 

public class Turtle { 
    private String name; 
    private Formatter f; 
    public Turtle(String name, Formatter f) { 
    this.name = name; 
    this.f = f; 
    } 

    public void move(int x, int y) { 
    f.format("%s The Turtle is at (%d,%d)\n", name, x, y); 
    } 

    public static void main(String[] args) { 
    PrintStream outAlias = System.err; 
    Turtle tommy = new Turtle("Tommy", 
     new Formatter(System.out)); 
    Turtle terry = new Turtle("Terry", 
     new Formatter(outAlias)); 
    tommy.move(0,0); 
    terry.move(4,8); 
    tommy.move(3,4); 
    terry.move(2,5); 
    tommy.move(3,3); 
    terry.move(3,3); 
    } 
} 
+0

你是什麼意思,「方法通話時間」? – 2012-02-25 13:22:20

+0

由於其中一個建議它是CPUT時間。我想知道是否有任何Java內置方法。不尋找任何複雜的,如探查器,但我可以在我的代碼中使用ad hoc。像這樣:long startTime = System.currentTimeMillis(); tommy.move(0,0); long endTime = System.currentTimeMillis(); System.out.println(「That took」+(endTime - startTime)+「milliseconds」); //但有辦法用一些Java方法在一行中完成它? – aretai 2012-02-25 14:19:25

+0

@aretal您的示例度量值是經過的(牆)時間,而不是CPU時間。顯然這很難在一條線上,因爲你至少需要標記時鐘應該以何種方式開始和停止的線。方面可以給你一個緊湊的解決方案,但如果你想要測量時間,那麼挖掘AOP可能是矯枉過正。 – 2012-02-26 17:57:34

回答

1

使用專用的工具,將顯示您甚至更多您需要:)在我看來,VisualVM是最好的一個。但還有其他可用的(例如本地JDK提供的JConsole或支付的JRockit)。
更多here on my post

這些工具顯示運行他們使用servlet一起消耗的應用程序和資源(如果有的話)的處理時間,錯誤和呼叫計數等。此外線程和實例化類上市。這肯定會滿足你的需求

3

使用一個分析器或手動指望他們:

public static int MOVE_CALL_COUNT; 


public void move(int, int) 
{ 
    MOVE_CALL_COUNT++; 
} 

剖析建議。在NetBeans中有一個內置的分析器。否則,VisualVM是推薦的選項,它與NetBeans中的分析器相同。

如果您確實想知道運行這些方法需要多長時間,請使用分析器。

+0

我認爲istai意味着用戶或CPU時間的數量,因爲帖子被標記爲[時間]。他也直接要求一個通用的方法,所以手動計數也可能不是一個正確的答案。當然,使用profiler *可能是繼續進行的方式。 – 2012-02-25 13:26:22

1

如果它正在測試每種方法需要執行多長時間,那麼在SO上已經有一些與此相關的好問題。檢查出this one for example

我的偏好,特別是在一個有很多方法的較大項目中,將使用AOP,因此它不涉及更改現有代碼。關於上面鏈接到的問題上的This answer表明AOP出於同樣的原因。正如他所建議的,在AOP中深入研究已經超出了這個範圍,但它肯定值得一看。查看this tutorial,瞭解如何使用彈簧進行方法計時。