2012-02-25 15 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

"メソッド呼び出し時間"とはどういう意味ですか? –

+0

pplの1つが示唆したように、CPUT時間でした。私はJavaの組み込みメソッドがあるかどうか疑問に思った。プロファイラのような複雑なものを探しているのではなく、私のコードで特別に使うことができるものを探しています。これは次のようなものです:long startTime = System.currentTimeMillis(); tommy.move(0,0); long endTime = System.currentTimeMillis(); System.out.println( "これは+(endTime - startTime)+"ミリ秒 "); //しかし、Javaメソッドを使って1行で行う方法はありますか? – aretai

+0

@aretalこの例では、CPU時間ではなく経過時間を計測しています。明らかに、1行でこれを実行するのは難しいです。少なくとも、時計が何とか開始し停止するはずの行をマークする必要があるからです。アスペクトはコンパクトなソリューションを提供しますが、時間を測定するだけであれば、AOPを掘り起こすのは難しいでしょう。 –

答えて

1

さらにあなたに表示される専用のツールを使用する必要があります:VisualVMは私の意見では最高のものですが、JDKネイティブで提供されるJConsoleや有料のJRockitなどがあります。
がよりhere on my post

これらのツールを読む(もしあれば)また、スレッドとインスタンス化のクラスがリストされている処理時間、エラーおよびコール数などをサーブレットと一緒に彼らが消費するアプリケーションやリソースを実行している示しています。これは確かにあなたのニーズを満たすでしょう

3

利用ありがとうございまたは手動でそれらを数える:

public static int MOVE_CALL_COUNT; 


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

プロファイリングが推奨されます。 NetBeansには、組み込みのプロファイラがあります。それ以外の場合は、VisualVMを推奨します。これはNetBeansと同じプロファイラです。

これらのメソッドを実行するのにどれくらい時間がかかるかを実際に知りたい場合は、プロファイラを使用します。

+0

私はあなたのサイトのCPU使用時間は、投稿が[時刻]にタグ付けされているため、あなたのサイトの量を意味します。また、彼は直接ジェネリックメソッドを要求したので、手動カウントはおそらく正解ではないでしょう。もちろん、プロファイラ*の使用は*進んでいる可能性があります。 –

2

JDKのプロファイラを試してみてください。visualvm

1

各メソッドの実行にどれくらいの時間がかかるかを調べる場合は、SOに関するこれに関するいくつかの良い質問があります。チェックアウト:this one for example

私の好みは、特に多くのメソッドを持つ大きなプロジェクトでは、既存のコードをあまり変更しすぎないように、AOPを使用することです。 This answer私は上記にリンクした質問で同じ理由でAOPを示唆しています。彼が示唆しているように、AOPの深さはこれの範囲を超えていますが、確かに一見価値があります。メソッドのタイミングにspringを使用する方法については、this tutorialを参照してください。