1

それで、nanoTime を少し操作するためだけに、かなりばかげたプログラムを作成しました。小さなコードの実行時間をチェックできるようにしたかったので、nanoTime が最適だと思いました。この短いコードの平均実行時間を求めたかったので、for ループの中に入れました。ただし、for ループ内では、平均は約 6,000 ナノ秒少なくなります。これは小さなコードでは大きな違いではないことはわかっていますが、まったく同じコードでもなぜ違うのでしょうか? 異なる時間を生成する 2 つのブロックを次に示します。これは平均で約 8064 ナノ秒です。

  long start, end, totalTime;
  double milliseconds, seconds, minutes, hours, days, years;
  totalTime = 0;

  start = System.nanoTime();
  milliseconds = System.currentTimeMillis();
  seconds = milliseconds/1000;
  minutes = seconds/60;
  hours = minutes/60;
  days = hours/24;
  years = days/365;
  end = System.nanoTime();
  totalTime = end-start;

これは平均で約 2200 ナノ秒です。

  long start, end, totalTime;
  double milliseconds, seconds, minutes, hours, days, years;
  totalTime = 0;


  for(int i = 1; i < 11; i++){
     start = System.nanoTime();
     milliseconds = System.currentTimeMillis();
     seconds = milliseconds/1000;
     minutes = seconds/60;
     hours = minutes/60;
     days = hours/24;
     years = days/365;
     end = System.nanoTime();
     totalTime += end-start;
     System.out.println(end-start); //this was added to manually calc. the average to 
    //make sure the code was executing properly. does not effect execution time.
  }

平均を求めるには、totalTime*.1 を使用します

4

1 に答える 1

3

これは、どのJava プログラムにも期待できることです。Java ランタイム、具体的には JIT コンパイラーは、プログラムの存続期間中に実行される回数が増えるほど、コードを大幅に最適化します。複数回実行すると、コードが高速化することを期待する必要があります。

于 2016-04-12T22:23:31.883 に答える