Java7速攻テスト

というわけで、Java7がリリースされました。
色々と面白そうな機能がありますね。


僕はSCTPなどが結構注目なんですが、取り合えずJava7上で現行のokuyamaを動かして、
どれぐら単純比較で性能が違うのか検証してみました。


okuyama側は特にJava7に合わせて変更などはしていないので、リリースVersion-0.8.8のままです。
ちなみに、okuyamaはThread、java.lang系、java.util系、java.io系、java.util.concurrent系などを
いたるところで使っています。
コンパイルのみJdk6とJdk7でそれぞれ実行前に行いました。
okuyamaのモードは永続化用のWALファイルは常に吐き出して、それ後データをメモリに持つモードと、
ファイルに持つモードで計測しました。ファイルに持つ場合はファイルへのI/Oはランダムリードです。
メモリ展開はSeriarizeMapもためしました。この場合はObjectのシリアライズ、デシリアライズ且つ、zip圧縮が行われます。
以下は実行したPCのスペックです。1台で行いました。

                                                              • -

CPU:Intel Corei5 650 3.20GHz
Memory:4GB
HDD:SATA 7200rpm 500GB×1
OS:CentOS5.5 (64bit)

                                                              • -

okuyamaのGCオプションは以下です。
"-Xmx1024m -Xms1024m -server -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseParNewGC"


テストは同時に8クライアントをスレッドで生成し、1分アクセスをSet、Get共にし続けます。
実際にアクセスを行うクラスは以下です。
http://sourceforge.jp/projects/okuyama/svn/view/trunk/test/ResponseTestThread.java?view=markup&revision=637&root=okuyama
このクラスを下記のクラスで8個インスタンス化してThreadとして実行します。
http://sourceforge.jp/projects/okuyama/svn/view/trunk/test/ResponseTest.java?view=markup&revision=442&root=okuyama




それではそれぞれの結果です。

                                                                                                                                • -

モード:WALファイル+Key&Value共にメモリ

                                                                                                                                • -

●Set
■Java6
60秒 = 1045091
17418 QPS
■Java7
60秒 = 1201714
20028 QPS


●Get
■Java6
60秒 = 1359632
22660 QPS
■Java7
60秒 = 1553264
25887 QPS

                                                                                                                                • -

モード:WALファイル+Key&Value共にメモリ+SerializeMap

                                                                                                                                • -

●Set
■Java6
60秒 = 383142
6385 QPS
■Java7
60秒 = 418954
6982 QPS


●Get
■Java6
60秒 = 708405
11806 QPS
■Java7
60秒 = 799126
13318 QPS



                                                                                                                                • -

モード:WALファイル+Key=メモリ&Value=ファイル

                                                                                                                                • -

●Set
■Java6
60秒 = 837324
13955 QPS
■Java7
60秒 = 939385
15656 QPS


●Get
■Java6
60秒 = 1273324
21222 QPS
■Java7
60秒 = 1423650
23737 QPS




こんな結果になりました。
総じて性能が向上しているのが分かります。
だいたい10%〜15%といったところでしょか。
まだどこがどうなってこういう結果が出ているのか
調査できていないので、そのへんもやりたいですね。
とりあえず速攻テストでした。