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