0

私のプログラムは、次のコードで 30000ns 速く実行されます。

long t = System.nanoTime();
...
long t2 = System.nanoTime();
System.out.println("Time: " + (t2 - t));

これよりも:

long t = System.nanoTime();
...
System.out.println("Time: " + (System.nanoTime() - t));

最初のものでは、別の変数も作成していますが、なぜそれが速いのでしょうか?

4

1 に答える 1

1

2 つ目は、新しい StringBuilder を作成し、タイミングを取る前にそれに String を追加します。最初のものは、この余分な作業を行う前にタイミングを取ります。

2番目のものは

System.out.println(new StringBuilder().append("Time: ")
                   .append(System.nanoTime() - t).toString());

また

StringBuildler sb = new StringBuilder().append("Time: "); // included in timing
long time = System.nanoTime() - t;
System.out.println(sb.append(time).toString());

ところで、コンソールへの出力を実行するだけで、非常に短いタスクが妨げられ、処理が遅くなる可能性があります。テストを何度も実行し、最初の 20K をウォームアップとして無視し、最後に結果の要約を出力することをお勧めします。

于 2013-10-27T18:51:01.450 に答える