2012/01/21

処理時間の計測(java)

javaの時間の測定はSystem.currentTimeMillis()とSystem.nanoTime()の2種類がある.

currentTimeMillis()

  • ms単位で処理時間が分かるが,CPU,OSなどの環境で10ms~15msの誤差あり.


nanoTime()
  • ns単位で処理時間が分かるが,1μs単位以下は誤差やこの処理そのものの時間も大きく関わってしまうので安全のために10μs以上では正確だろう
この両方についてcurrentTimeMillis()はms単位,nanoTime()はms単位で小数点3桁(μs)まで表示するプログラムを作成.



 1. currentTimeMillis()
 
import java.text.*;

long currentstart = System.currentTimeMillis();

//計測したい処理

long currentstop = System.currentTimeMillis();
NumberFormat currentformat = NumberFormat.getNumberInstance();
System.out.println("処理時間は" + currentformat.format((currentstop-currentstart)) + "ms <- currentTimeMillis()");

 2. nanoTime()
 
import java.text.*;

long nanostart = System.nanoTime();

  //計測したい処理

long nanostop = System.nanoTime();
NumberFormat nanoformat = NumberFormat.getNumberInstance();
nanoformat.setMaximumFractionDigits(3);// 小数点以下の桁を3桁に設定
nanoformat.setMinimumFractionDigits(3);
System.out.println("処理時間は" + nanoformat.format((double)(nanostop-nanostart)/1000/1000) + "ms <- nanoTime()");

今回は時間を計測するのがメインだったが,それよりも有効桁などを調節するフォーマットの方が勉強になったかも.
別記事でフォーマットも書こうかな
cだとprintfで色々できるが,javaはformatをつくってそれを自分の好きなように調節して引数に数字を入れるということか,


ここを参考に




    0 件のコメント:

    コメントを投稿