2011-07-11 4 views
26

Javaに精通している人には、私が取り組んでいるアプリケーションがあり、ちょうど1分以内に値を返さなければならないことに気がついたが、見つけたり表示したりする方法がわからないプログラムを実行するのにかかる時間。これに関する助けがあれば大いに感謝します。おかげJavaプログラムを実行するのにかかる時間を見つけるには?

+0

「Javaプログラムを実行するのにかかる時間を見つける方法」 ? –

+0

@ハリー・ジョイええ、まさしく私が意味すること。 – MK1

+0

申し訳ありませんが、あなたの質問が十分ではありません。私は日食はここでは無関係だと思う。ランタイムは混乱するので無関係です。 JDKにはRuntimeクラスがあり、Runtime.getRuntime()を呼び出すことによってそのシングルトンインスタンスを取得できますが、探しているものとは思われません。あなたの質問を考え直して書き直してください。 – AlexR

答えて

67
long startTime = System.nanoTime(); 
//code 
long endTime = System.nanoTime(); 
System.out.println("Took "+(endTime - startTime) + " ns"); 

はどのくらいあなたのプログラムが実行されているために参照するには組み込みの方法はありません

+2

ありがとうございました。あなたの答えは本当にポイントです。 – chepukha

+0

には理由があります。とSysout? – user227353

+0

thats typoは修正されていません –

12

参照してください。ただし、プログラムの開始時に現在の時刻を保存するだけで、後で時間の経過を確認できます。

public class MyProgram { 
    private static long startTime = System.currentTimeMillis(); 

    public static void main(String[] args) { 
     // Do stuff... 

     // At the end 
     long endTime = System.currentTimeMillis(); 
     System.out.println("It took " + (endTime - startTime) + " milliseconds"); 
    } 
} 
1

あなたのプログラムの実行時間は、プログラムの開始時と終了時にSystem.currentTimeMillis()を使用していることを知りたい場合は、

0

これは、例えばSpring AOPを使用して、側面の典型的なユースケースである:

@Aspect 
public class TimerAspect { 

    private static final Logger LOG = Logger.getLogger(TimerAspect.class); 

    @Around("com.xyz.myapp.MyClass.myMethod()") 
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { 
     long startTime = System.nanoTime(); 
     Object retVal = pjp.proceed(); 
     long endTime = System.nanoTime(); 
     LOG.info(String.format("Call to %s.%s with args %s took %s ns", pjp.getTarget(), pjp.getSignature(), Arrays.toString(pjp.getArgs()), endTime - startTime)); 
     return retVal; 
    } 
} 

そして、あなたのアプリケーションのコンテキストで:

<aop:aspectj-autoproxy/> 
<bean id="myAspect" class="org.xyz.TimerAspect"/> 
1

あなたのプロジェクトの依存関係として春(またはドン」を持っている場合それを追加する心)、あなたはStopWatchを使用することができます。名前が示すように、一度初期化すると、停止するまで時間がカウントされます。その後、タスクにかかる時間を確認できます。複数のStopWatchを同時に複数のタスクに使用して、コードをきれいに保つことができます。

コードをきれいに保つだけでなく、StopWatchesは時刻やその他のユーティリティメソッドの書式設定に役立ちます。

public void myMethod(){ 
    StopWatch stopWatch = new StopWatch(); 

    stopWatch.start("Task1"); 
    // ... 
    // Do my thing 
    // ... 
    stopWatch.stop(); 
    System.out.println("Task executed in " + StopWatch.getTotalTimeSeconds() + "s"); 
} 
関連する問題