JSONICのパフォーマンス向上はここらが限界
「Jackson vs JSONIC、結果はJacksonの圧勝」に対向するため、数日に渡ってJSONICのパフォーマンスチューニングを行ってきましたが、ここらで限界というところまできてしまいました。jacksonに速度で負けている理由の大半は、IOのバッファリングにあるらしく、そこをちょっといじるだけでずいぶん速くなるというのが結論。バッファリングの問題であるということから想定される通り、速度差の一番の原因は、String型に出力する場合にはほとんど関係ないというのが残念なところ。
- | Jackson | JSONIC | 速度比 |
---|---|---|---|
Map1000×List1000 | 502.6083 | 614.5989 | 1 : 1.22 |
Map1000×List10000 | 4199.0609 | 8439.9083 | 1 : 2.01 |
Map10000×List1000 | 4294.5540 | 6303.7775 | 1 : 1.47 |
Map100×Object | 2.7032 | 0.6869 | 1 : 0.25 |
Map1K×Object | 5.7042 | 3.8384 | 1 : 0.67 |
Map10K×Object | 38.3262 | 50.9306 | 1 : 1.33 |
Map100K×Object | 277.4243 | 395.4630 | 1 : 1.43 |
List100×Object | 4.6443 | 3.4030 | 1 : 0.73 |
List1K×Object | 5.7136 | 7.9831 | 1 : 1.40 |
List10K×Object | 35.2560 | 46.1092 | 1 : 1.31 |
List100K×Object | 260.0687 | 333.4722 | 1 : 1.28 |
まだまだ勝利には遠すぎるのですが、1.2〜1.5倍程度に収まっているのでまぁいいかという気になってます。というより、もはや最低限の記述しかしておらず、何が差を生んでるのかさっぱりわからない状況だったり。一応、上記版をJSONIC 1.2.5 ベータ2としてsourceforge.jpにアップロードしておきました。
http://sourceforge.jp/projects/jsonic/releases/
クラスに対する処理のディスパッチや文字列のエスケープ方法など他の場所も修正したので、全体的にパフォーマンスは向上しているはずなのですが、大量のオブジェクトを繰り返し使用する場合には意味があるくらいで、普通の使い方してる分には1、2%程度しか変わらない雰囲気。う〜む。