web-dev-qa-db-ja.com

プログラムの実行時間を計算する方法

重複している可能性があります:
Javaでメソッドの実行を計測する方法は?

私はプログラムを書き、そして今私は自分のプログラムの最初から最後までの総実行時間を計算したいと思います。

これどうやってするの?

108
Mahdi_Nine

現在時刻を取得するには System.nanoTime を使用してください。

long startTime = System.nanoTime();
.....your program....
long endTime   = System.nanoTime();
long totalTime = endTime - startTime;
System.out.println(totalTime);

上記のコードは、プログラムの実行時間をナノ秒単位で表示します。

220
snakile

あなたのメインメソッドの始めに、このコード行を追加してください:

final long startTime = System.nanoTime();

そして、メインメソッドの最後の行に次のものを追加できます。

final long duration = System.nanoTime() - startTime;

durationには、プログラムが実行された時間がナノ秒単位で含まれています。たとえば、この値を次のように印刷することができます。

System.out.println(duration);

秒単位で継続時間を表示したい場合は、値を1'000'000'000で割る必要があります。あるいはDateオブジェクトが欲しい場合は:Date myTime = new Date(duration / 1000);Dateのさまざまなメソッドにアクセスして、分数、時間数などを表示できます。

40
krtek

さらに正確な値を読みたい場合は、System . currentTimeMillis ()またはSystem . nanoTime ()を使用してください。通常、ユーザーに値を出力する必要がある場合は、ミリ秒で十分です。さらに、System.nanoTime()は負の値を返す可能性があるため、そのメソッドを使用している場合は戻り値が正しくない可能性があります。

一般的で広く使用されているのは、ミリ秒を使用することです。

long start = System.currentTimeMillis();

... 


long end = System.currentTimeMillis();

NumberFormat formatter = new DecimalFormat("#0.00000");
System.out.print("Execution time is " + formatter.format((end - start) / 1000d) + " seconds");

通常、ナノ秒は、単体テストやベンチマークなど、非常に短く正確なプログラム実行の計算に使用されます。したがって、プログラム全体の実行には、ミリ秒が望ましいです。

19
Yanick Rochon

これに対する一般的なアプローチは次のとおりです。

  1. ベンチマークの開始時にmain()の開始時と言います。
  2. コードを実行してください。
  3. ベンチマークの最後、main()の最後で時間を計ってください。
  4. 終了時刻から開始時刻を引き、適切な単位に変換します。

ヒント:System.nanoTime()またはSystem.currentTimeMillis()を見てください。

4
Chinmay Kanchi

アプリケーションが起動した時間を取得し、それをアプリケーションが終了した時間と比較する必要があります。

アプリが起動したら、

Calendar calendar = Calendar.getInstance();

// Get start time (this needs to be a global variable).
Date startDate = calendar.getTime();

アプリケーションが終了したとき

Calendar calendar = Calendar.getInstance();

// Get start time (this needs to be a global variable).
Date endDate = calendar.getTime();

違いを(ミリ秒単位で)取得するには、次のようにします。

long sumDate = endDate.getTime() - startDate.getTime();
2
FreeAsInBeer

よく知られている(そして既に言及されている)System.currentTimeMillis()System.nanoTime()の他に、 perf4j というきちんとしたライブラリーもあります。

2
Boris