javaでベンチマーク(?)

なんとなく作ってみたプログラム。
うちにあるPC3台はどのくらいの実行速度を出すのかだけを調べるために使った。

ふらんちゃんによってこれをパクって真似て作られたいろいろな言語でベンチマーク(?)はこちら

どんなプログラム?

タイトル通りjavaで作られたプログラム。
大文字小文字のアルファベット+0〜9までの数字の合計62文字の中からランダムで10桁の文字を求めるプログラム。

コードを丸パクリ参考にさせていただいたYahoo!知恵袋はこちら

具体的なソースコードは以下

package java_benchmark;

import java.util.Calendar;

public class MainActivity {
    static char[] charlist = new char[62];
    static boolean While = true;
    static int times = -1;
    static int startDATE[] = new int[3];
    static int endDATE[] = new int[3];
    static int ansDATE[] = new int[3];

    public static void main(String[] args){
        if(args.length != 1)
            times = 100000000;
        else
            times = Integer.valueOf(args[0]);
        System.out.println(times + "回ループします");
        Calendar cal = Calendar.getInstance();
        startDATE[0] = cal.get(Calendar.MINUTE);
        startDATE[1] = cal.get(Calendar.SECOND);
        startDATE[2] = cal.get(Calendar.MILLISECOND);
        System.out.println("start:" + startDATE[0] + ":" + startDATE[1] + "," + startDATE[2]);

        while(While){
        for(int i = 0; i < 10; ++i)
            charlist[i] = (char) ('0' + i);
            for(int i = 0; i < 26; ++i){
                charlist[i + 10] = (char) ('a' + i);
                charlist[i + 36] = (char) ('A' + i);
        }
            char[] rndword = new char[11];
            for(int i = 0; i < 10; ++i)
                rndword[i] = charlist[ (int) (61 * Math.random())];
            //System.out.println(rndword);
            times--;
            if(times == 0)
                While = false;
        }
        Calendar cal2 = Calendar.getInstance();
        endDATE[0] = cal2.get(Calendar.MINUTE);
        endDATE[1] = cal2.get(Calendar.SECOND);
        endDATE[2] = cal2.get(Calendar.MILLISECOND);

        cal2.add(Calendar.MINUTE, -startDATE[0]);
        cal2.add(Calendar.SECOND, -startDATE[1]);
        cal2.add(Calendar.MILLISECOND, -startDATE[2]);
        ansDATE[0] = cal2.get(Calendar.MINUTE);
        ansDATE[1] = cal2.get(Calendar.SECOND);
        ansDATE[2] = cal2.get(Calendar.MILLISECOND);

        System.out.println("end:" + endDATE[0] + ":" + endDATE[1] + "," + endDATE[2]);
        System.out.println("margin:" + ansDATE[0] + ":" + ansDATE[1] + "," + ansDATE[2]);
    }
}

見返して思ったけどくそ汚えコードじゃね
まぁ自分だけしか見ないし多少はね?

コマンドラインで実行する際に引数としてintの数を設定することで何回10桁の数を求めるかを設定できます。
デフォルトは1億回ですはい
1億回でもすぐ終わるからlong型にしようか迷ってます

なんとなくのベンチテストとしては使えるかなと。。。
俺優しいから一応jarファイル上げておきます

使い方

ターミナルとか端末とかcmdとかそこらへん使って実行してみてください

$ java -jar (java_benchmarkのパス)

たぶんこれで実行できるはず
処理が終わると「margin:」が出てくるんで、それが処理にかかった時間です

//例
margin:0:23,530
これは処理にかかった時間が23秒と530ミリ秒ということです。

実行結果

メイン機 0:46,738
MacBook 0:23,530
新サーバー 0:33,104
サーバー 0:42,727
旧サーバー 3:24,44
家族共用PC 0:24,592

なんかプログラム自体が全コア使いきれてないような気がするんですよね・・・

旧サーバーの速度はお察し
CeleronD331の遅さを舐めてはいけない(戒め

Macさんがこんなに早いと思いませんでした・・・なぜだ・・・

i7のメイン機よりi5の家族共用PCのほうが実行速度早いってどういうことですかね・・・
Haswellだからとかなんですかね・・・