この質問にはすでに答えがあります。
私はJavaでいくつかのアルゴリズムの複雑さを分析する必要があります。そのために、私は大量の入力を与え、Javaの実装にかかる時間を測定することを計画しています。いくつかのコード行の間の時間をチェックするための最も正確で正確な方法は何ですか?ミリ秒単位の精度が必要です。
あなたもナノ秒の解像度を得ることができますSystem.nanoTime()
。
ただし、以下の点を考慮してください。
Javaで正しいマイクロベンチマークを書くにはどうすればいいですか?
のようなライブラリを使うSpeed4j。これは、コールをベンチマークするだけでなく、ログに統計を提供するだけでなく、JMXを介してそれらをリモートで確認することもできます。 System.current ..呼び出しをコード全体に配置するよりも、このようなライブラリを使用する方が適切です。
顕微鏡の下に置きたい特定の方法があるとします。次のようにすることができます。
long time1 = System.nanoTime();
thatMethod();
long time2 = System.nanoTime();
long timeTaken = time2 - time1;
System.out.println("Time taken " + timeTaken + " ns");
コンピュータは本当に速いので、使うときにその時差が起こるかもしれませんgetTimeMillis()
たぶんゼロ。したがって、nanoTime()
また使用することができますCaliper
。始めるためのビデオがあります。さらに、が指している答えをよく読んでください。creichen
。それにはたくさんの素晴らしいものがあります。
つかいますSystem.nanoTime()
またはSystem.currentTimeMillis()
コードの開始時間と終了時間の両方を取得します。マイクロベンチマークはJVMパフォーマンスの基本的な側面のみを測定することに注意してください。 JVMのウォームアップフェーズに注意してください。JIT開始されます。
long start = System.currentTimeMillis();
// your code
long end = System.currentTimeMillis();
long diff = end-start;
または
long start = System.nanoTime();
// your code
long end = System.nanoTime();
long diff = end-start;
long diffInMillis = diff/1000000;
long startTime = System.currentTimeMillis();
//code lines whose time you want to calculate
long endTime = System.currentTimeMillis();
System.out.println("Took "+(endTime - startTime) + " ms");
-1
これだけど。。。コードをフォーマットしてください。すでに述べられていることを述べないでください。 - Little Child