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