2015.12.16
時間計測
はじめに
プログラムの中で時間を計測する方法を紹介します。
時間計測は、主に作成したプログラム処理の速度の確認に使用します。
プログラムの速度は、動作環境(OS、CPU、メモリ、HDDなど)・データ構造・アルゴリズムなどによって変わります。
プログラムの中に時間計測を埋め込むことで、どの処理にどれくらいの時間はかかっているかを調べることができるので、改善するべき処理を見つけ易くなります。
時間の計測方法は、処理を開始した時刻と処理を終了した時刻との差で求めます。
時刻を取得するメソッドにはcurrentTimeMillisがあります。これは現在の時刻をミリ秒単位で取得できるもので、この時刻の差を計算することでミリ秒単位の処理時間の計測が行えます。
System.currentTimeMillisメソッド
public static long currentTimeMillis()
・現在時刻をミリ秒単位で返します。 パラメータ なし 戻り値 エポック※からのミリ秒を返します。 ※1970年1月1日午前0時0分0秒(世界標準時)
さらに短い処理時間を計測したい場合は、システムのタイマーを取得するnanoTimeというものがあります。
これはナノ秒単位(1億分の1秒)で値を取得できるもので、この値の差を計算することでナノ秒単位の処理時間の計測が行えます。
System.nanoTimeメソッド
public static long nanoTime()
・システムタイマーの値をナノ秒単位で返します。 パラメータ なし 戻り値 システムタイマーの現在の値をナノ秒単位で返します。
Javaソースコードと実行結果 ミリ秒単位
ミリ秒単位で処理時間を計測する例です。
このプログラムでは、for文を使ってdouble型の変数totalと、int型の変数iをdouble型に型キャストした値の足し算を100000000回行っています。for文の前で開始時刻ts、for文を抜けた後で終了時刻teを取得し、その差を処理時間tmsecに代入しています。
TimeMeasurement1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023
public class TimeMeasurement1 { public static void main( String[] args ) { // 開始時間をミリ秒で取得 long ts = System.currentTimeMillis(); // 時間のかかる処理(サンプル) double total = 0.0; for ( long i = 1; i <= 100000000; ++ i ) { total += (double)i; } // 終了時間をミリ秒で取得 long te = System.currentTimeMillis(); // 処理時間 ミリ秒 long tmsec = te - ts; // 処理時間 秒 double tsec = (double)tmsec / 1000.0; System.out.println( "処理時間 : " + tmsec + "ミリ秒 " + tsec + "秒" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis TimeMeasurement1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac TimeMeasurement1.java
実行
C:\talavax\javasample>java TimeMeasurement1
出力結果
処理時間 : 1181ミリ秒 1.181秒
Javaソースコードと実行結果 ナノ秒単位
TimeMeasurement2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027
public class TimeMeasurement2 { public static void main( String[] args ) { // 開始時間をナノ秒で取得 long ts = System.nanoTime(); // 時間のかかる処理(サンプル) double total = 0.0; for ( long i = 1; i <= 100000000; ++ i ) { total += (double)i; } // 終了時間をナノ秒で取得 long te = System.nanoTime(); // 処理時間 ナノ秒 long tnsec = te - ts; // 処理時間 ミリ秒 double tmsec = (double)tnsec / 1000000.0; // 処理時間 秒 double tsec = tmsec / 1000.0; System.out.println( "処理時間 : " + tnsec + "ナノ秒 " + tmsec + "ミリ秒 " + tsec + "秒" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis TimeMeasurement2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac TimeMeasurement2.java
実行
C:\talavax\javasample>java TimeMeasurement2
出力結果
処理時間 : 1171189711ナノ秒 1171.189711ミリ秒 1.171189711秒
以上です。
関連コンテンツ
オペレーティングシステムは、コンピューターに入っている基本のソフトウェアで、電源を入れると最初に起動します。オペレーティングシステムが持っている機能って何?
2022.07.14