逆襲のJSONIC! ……ならず

某所にてJSONICなんて目じゃないぜ、とばかりにJacksonに圧倒的差を付けられてしまい涙目状態だったわけですが、ちょっとはがんばってみようというわけで今日一日かけてパフォーマンス・チューニングしてみました。

チューニング結果は次の通り(ソースはリンク先とほぼ同じ。チューニング後のものは、jsonic-2.5 ベータ1としてsourceforgeアップしました)。

- Jackson JSONIC 速度比
Map1000×List1000 408.53354 1633.88864 1 : 4.00
Map1000×List10000 4226.438111 17875.302405 1 : 4.23
Map10000×List1000 4216.586653 17389.64673 1 : 4.12
Map100×Object 55.739099 29.20877 1 : 0.52
Map1K×Object 13.22453 27.175345 1 : 2.05
Map10K×Object 39.323709 103.618247 1 : 2.64
Map100K×Object 277.424284 1665.091483 1 : 6.00
List100×Object 4.21741 1.085577 1 : 0.26
List1K×Object 5.713606 7.983138 1 : 1.40
List10K×Object 23.862154 83.53123 1 : 3.50
List100K×Object 216.342847 797.925343 1 : 3.69

うーむ、JSONICは10倍遅い! とは言われなくなっても、4倍遅いは言われかねない数字です。逆襲失敗。まぁ、オブジェクト数が数千以下だとJSONICの方が速かったりするみたいなのでWeb開発の実用上は問題ない気もしますが。

ちなみに、JSONICjson-libやgsonに比べれば3倍以上高速なので、JSONICが遅いというよりJacksonが速すぎるという噂もあります。実際、ToStringに匹敵する速度で動作してます。Jacksonのソースもちょっと見てみたりしたのですが、なぜこんなに早いのかまったくの謎。文字列操作で工夫しているような雰囲気も見えますが、特に項目数が多いときの速度は説明が付かないレベル。謎すぎる。