これは何?
2017/9/21にJava9が正式にリリースされました。 Java9ではStringのあれこれが変わったと聞いていますが、そんなことはどうでもいいのです。
維持屋にとっては、バージョンアップ後のパフォーマンスがどうなるのか、が重要なのです!!(極論)
前提
これと同じプログラムを使ってテストしました。
qiita.com
@YujiSoftware さんのブログで、VMオプションについて記載されていたのでそれについても試しています。
d.hatena.ne.jp
githubのソースの場所はこちら。
github.com
jmhの起動方法などはこちらにまとめています。
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/command.txt
テストした端末のスペックなどは以下の通りです。
- Windows10 64bit
- Intel® Core™ i7-2820QM CPU @ 2.30GHz
- メモリは8GM
結果
注釈
- スマホからだと見づらいので、パソコンにするか、横にして画面を広げるか、などをお勧めします。
- Scoreの数字が大きいほど、パフォーマンスがいいと言えます。
半角英字
VM version: JDK 1.8.0_144, VM 25.144-b01
Benchmark Mode Cnt Score Error Units
StringLineHankaku.call1StringLine thrpt 10 141.099 ± 1.144 ops/s
StringLineHankaku.call2StringConcat thrpt 10 35.888 ± 0.221 ops/s
StringLineHankaku.call3StringBuffer thrpt 10 97.689 ± 0.812 ops/s
StringLineHankaku.call4StringBuilder thrpt 10 98.916 ± 3.052 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineHankakuJava8Result_20170923.txt
VM version: JDK 9-ea, VM 9-ea+134(Early Access版)
Benchmark Mode Cnt Score Error Units
StringLineHankaku.call1StringLine thrpt 10 90.187 ± 2.961 ops/s
StringLineHankaku.call2StringConcat thrpt 10 46.822 ± 3.277 ops/s
StringLineHankaku.call3StringBuffer thrpt 10 68.937 ± 2.796 ops/s
StringLineHankaku.call4StringBuilder thrpt 10 78.742 ± 2.665 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineHankakuJava9Result.txt
VM version: JDK 9, VM 9+181
VM options: なし
Benchmark Mode Cnt Score Error Units
StringLineHankaku.call1StringLine thrpt 10 92.795 ± 2.711 ops/s
StringLineHankaku.call2StringConcat thrpt 10 27.106 ± 17.205 ops/s
StringLineHankaku.call3StringBuffer thrpt 10 53.108 ± 21.248 ops/s
StringLineHankaku.call4StringBuilder thrpt 10 62.540 ± 21.275 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineHankakuJava9Result_20170923.txt
VM options: -XX:-CompactStrings -DCompactStringEnabled=false
Benchmark Mode Cnt Score Error Units
StringLineHankaku.call1StringLine thrpt 10 108.819 ± 4.212 ops/s
StringLineHankaku.call2StringConcat thrpt 10 50.795 ± 0.952 ops/s
StringLineHankaku.call3StringBuffer thrpt 10 56.127 ± 0.568 ops/s
StringLineHankaku.call4StringBuilder thrpt 10 104.129 ± 1.707 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineHankakuJava9Result_20170923_withOption.txt
半角数字
VM version: JDK 1.8.0_144, VM 25.144-b01
Benchmark Mode Cnt Score Error Units
StringLineNumber.call1StringLine thrpt 10 112.127 ± 34.207 ops/s
StringLineNumber.call2StringConcat thrpt 10 71.693 ± 0.270 ops/s
StringLineNumber.call3StringBuffer thrpt 10 103.061 ± 1.590 ops/s
StringLineNumber.call4StringBuilder thrpt 10 88.149 ± 35.149 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineNumberJava8Result_20170923.txt
VM version: JDK 9-ea, VM 9-ea+134(Early Access版)
Benchmark Mode Cnt Score Error Units
StringLineNumber.call1StringLine thrpt 10 245.689 ± 13.801 ops/s
StringLineNumber.call2StringConcat thrpt 10 132.742 ± 9.051 ops/s
StringLineNumber.call3StringBuffer thrpt 10 49.300 ± 1.349 ops/s
StringLineNumber.call4StringBuilder thrpt 10 52.594 ± 2.545 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineNumberJava8Result.txt
VM version: JDK 9, VM 9+181
VM options: なし
Benchmark Mode Cnt Score Error Units
StringLineNumber.call1StringLine thrpt 10 187.399 ± 111.698 ops/s
StringLineNumber.call2StringConcat thrpt 10 103.961 ± 50.983 ops/s
StringLineNumber.call3StringBuffer thrpt 10 33.543 ± 21.675 ops/s
StringLineNumber.call4StringBuilder thrpt 10 51.688 ± 0.346 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineNumberJava9Result_20170923.txt
VM options: -XX:-CompactStrings -DCompactStringEnabled=false
Benchmark Mode Cnt Score Error Units
StringLineNumber.call1StringLine thrpt 10 238.952 ± 12.086 ops/s
StringLineNumber.call2StringConcat thrpt 10 107.838 ± 3.610 ops/s
StringLineNumber.call3StringBuffer thrpt 10 101.667 ± 97.174 ops/s
StringLineNumber.call4StringBuilder thrpt 10 177.984 ± 3.698 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineNumberJava9Result_20170923_withOption.txt
全角文字
VM version: JDK 1.8.0_144, VM 25.144-b01
Benchmark Mode Cnt Score Error Units
StringLineZenkaku.call1StringLine thrpt 10 141.133 ± 1.504 ops/s
StringLineZenkaku.call2StringConcat thrpt 10 36.212 ± 0.202 ops/s
StringLineZenkaku.call3StringBuffer thrpt 10 97.025 ± 2.155 ops/s
StringLineZenkaku.call4StringBuilder thrpt 10 99.454 ± 1.509 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineZenkakuJava8Result_20170923.txt
VM version: JDK 9-ea, VM 9-ea+134(Early Access版)
Benchmark Mode Cnt Score Error Units
StringLineZenkaku.call1StringLine thrpt 10 92.686 ± 0.299 ops/s
StringLineZenkaku.call2StringConcat thrpt 10 49.554 ± 0.684 ops/s
StringLineZenkaku.call3StringBuffer thrpt 10 56.950 ± 6.474 ops/s
StringLineZenkaku.call4StringBuilder thrpt 10 69.917 ± 0.210 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineZenkakuJava9Result.txt
VM version: JDK 9, VM 9+181
VM options: なし
Benchmark Mode Cnt Score Error Units
StringLineZenkaku.call1StringLine thrpt 10 93.176 ± 1.204 ops/s
StringLineZenkaku.call2StringConcat thrpt 10 48.488 ± 0.728 ops/s
StringLineZenkaku.call3StringBuffer thrpt 10 55.984 ± 6.048 ops/s
StringLineZenkaku.call4StringBuilder thrpt 10 63.517 ± 0.586 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineZenkakuJava9Result_20170923.txt
VM options: -XX:-CompactStrings -DCompactStringEnabled=false
Benchmark Mode Cnt Score Error Units
StringLineZenkaku.call1StringLine thrpt 10 109.511 ± 1.972 ops/s
StringLineZenkaku.call2StringConcat thrpt 10 50.061 ± 2.419 ops/s
StringLineZenkaku.call3StringBuffer thrpt 10 55.549 ± 0.624 ops/s
StringLineZenkaku.call4StringBuilder thrpt 10 104.124 ± 1.103 ops/s
結果全文
https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/MyBenchmarkStringLineZenkakuJava9Result_20170923_withOption.txt
まとめ
お願い
- 違う結果が出たよ、というのがありましたらテスト方法含めてどこかにまとめたうえで教えてください。勉強しに行きます。