2015.12.16

時間計測

はじめに

プログラムの中で時間を計測する方法を紹介します。

時間計測は、主に作成したプログラム処理の速度の確認に使用します。

プログラムの速度は、動作環境(OSCPUメモリ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型変数idouble型型キャストした値の足し算を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ソースコードと実行結果 ナノ秒単位

ナノ秒単位で処理時間を計測する例です。

このプログラムでも、TimeMeasurement1.javaと同様にfor文を使って100000000回の足し算を行っています。

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.12.29

コンピュータは、いくつかの装置から構成されています。その主な5つの装置(機能)って何?

2022.07.10

データを記憶する部品のことで、ハードディスク、ハードディスクドライブと呼ばれます。電源の供給がなくてもデータが消えない記憶装置です。

2022.07.14

オペレーティングシステムは、コンピューターに入っている基本のソフトウェアで、電源を入れると最初に起動します。オペレーティングシステムが持っている機能って何?

2022.07.14

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

プログラミングで使う変数って何?

2020.03.23

データの型を変換する方法を詳しく解説しています。例)int型 → long型

2015.11.01

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

プログラミング、ITに関する用語をまとめています。

2022.10.17

広告