せでぃのブログ

ブログ初心者おいどんのどうでもいい愚痴やどうでもいい愚痴やどうでもいいマメ知識などを披露するチラシの裏です。

java計測

github.com


Objective-CvsSwift - せでぃのブログ
 ついこの間、Objective-Cの計測をしたばかりなので、ついでにjava8で噂のstreamとtimeAPIを使って同じように計測してみた。開発環境がEclipseXcodeと別なので、言語間の処理速度を一概に比較はできませんが、java激早でしたわ。
 当然のごとく、再帰部分でStackOverflowErrorが出るので、「-Xss5M」くらいのVMのオプションをつけてやる。あれね、プロジェクトがjavaバージョンとひもづいてるのに気付かずに、Eclipseの環境設定ばっか確認して、古いプロジェクトでstreamもInstantもインポートできなくてハマりかけましたわw
f:id:Sediment:20150413103044p:plain


 これをstreamで書き換えると、

private static boolean initCalc1() {
	for (int i=0;i<100;i++){
		for (int j=0;j<100;j++){
			recurseDecreasing(100000);
			loopcounter++;
		}
	}
	return true;
}

こうなるらしい。へー、for..inとかも含めると慣れるまで時間かかりそう。処理速度については、ほとんど変わりませんでした。

private static boolean initCalc2() {
	IntStream.range(0, 100).forEach(i -> {
		IntStream.range(0, 100).forEach(j -> {
			recurseDecreasing(100000);
			loopcounter++;
		});
	});
	return true;
}

 インターバルはこんなんになりました。

Instant start = Instant.now();
// ここでなんかの処理
Instant end = Instant.now();
Duration elapse = Duration.between(start, end);
System.out.println(elapse + "[s]");

参考)
 なかなか単純なforループやインターバルの書き換え方を掲載したサイトがなくて、助かりました。
StreamAPIについて調べてみた range編 その1 - シュンツのつまづき日記
java7までの処理計測と、java8からの処理計測