javaで時間計測する方法 -ラップタイムを計測するクラス

Javaの学習。

時間計測にはSystem.currentTimeMillisを使う。
コード中の2点を通るまでの時間はそれぞれでSystem.currentTimeMillisでlong型の値を取得してその差分をとるとミリ秒単位での時間になる。そこでラップタイムをとるクラスを作ってみた。

public class Timer {
	private int nrotate;
	private int index;
	private long startat;
	private long[] laps;

	Timer(int n) {
		nrotate = 10;
		index = 0;
		laps = new long[nrotate];
	}

	void start() {
		startat = System.currentTimeMillis();
	}

	void lap() {
		long e = System.currentTimeMillis();
		laps[index] = e;
		index = (index + 1) % nrotate;
	}

	void print() {
                // startからの経過時間、直前のラップとの差分を表示する
		for (int i = 0; i < laps.length; i++) {
			long lap = laps[(index + i) % nrotate] - startat;
			long bet = laps[(index + i) % nrotate]
					- (laps[(index + i - (i == 0 ? 0 : 1) + nrotate) % nrotate]);
			System.out.println((i + 1) + ":" + lap + ", " + bet);
		}
	}
}

使ってみた

public class TakeLapTime {
	public static void main(String[] args) {
		Timer timer = new Timer(10);
		timer.start();

		for (int i = 0; i < 10; i++) {
			ComputeIntensive.intensive();
			timer.lap();
		}
		timer.print();
	}
}

class ComputeIntensive {
	static long intensive() {
		long n = 10000000;
		long sum = 0;
		for (int i = 1; i <= n; i++)
			sum += i;
		return sum;
	}
}

出力結果

1:156, 0
2:313, 157
3:391, 78
4:484, 93
5:578, 94
6:656, 78
7:734, 78
8:828, 94
9:906, 78
10:1000, 94