Java1.4.2〜Java7.0で文字列操作の速度を測ってみた(やっつけ)

昨日ちょこっと計ってみたら大きく差が出たのでネタとして。

最初Java1.4.2とJava7.0だけを比べていたらメジャーバージョン2つ飛ばして計測はアレみたいな反応があったので、間のも測ってみました。

文字列操作は業務システムだと沢山の箇所で使われていると思っています。
入力値チェックに始まりCSV出力まで小さいものから大きい物まで。

java.net.URLEncoderというクラスがありますが、
こちらのクラスは、文字列を解析して、他の文字列に組み替えてくれるクラスです。
今回はこのクラスを実行させて、Java1.4.2とJava5.0とJava6.0とJava7.0での速度の差を測ってみました。

なお、実行環境はCore2Duo P8600(2.4GHz)上のWindows Vista(32bit)です。

Java1.4.2_19
  1ループ目 2ループ目
1 19617 19762
2 19572 19561
3 19561 19605
Java1.5.0_22
  1ループ目 2ループ目
1 20337 20147
2 20415 20040
3 20409 20159
Java1.6.0_29
  1ループ目 2ループ目
1 11246 9301
2 11158 9299
3 11205 9324
Java1.7.0
  1ループ目 2ループ目
1 10028 7898
2 9996 7894
3 10007 7994

(単位はms)

※名称は使用したランタイムに併せてあります。

使用したソースはこちら。

※2回測定しているのは最適化の恩恵を受けた後の結果のみを見るためです。
(一回目は最適化前後の結果が混ざっているはず)

今回、java1.4.2_19からJava7.0まで測定してみたら、2倍以上の速度の差が出ました。
バージョンを上げるだけで倍以上の性能になるのだなぁと感激。
特に、Java5.0とJava6.0の間にものすごい最適化が図られているというのは驚嘆するばかりです。

以前、CSV出力処理を作ったことがあるのですが、今回の処理はCSV出力で使用する処理を小型化したようなものとの印象です。
Java5.0以下を使用していてCSV出力で性能劣化が激しい等困られている場合はそれだけでJavaのバージョンを上げたほうが良いかもしれません。

#もうEOD迎えてるし!

なお、ソースコードの一部に @seratch さんのコードを使わせていただいてますw