ベンチマークを更新しました

SpringFramework 2.0.4で、ちょうどベンチマークに関係する部分のパフォーマンスチューニングを行ったとの事なので(詳しくは次のエントリ参照)、再度ベンチマークを行いました。Seasar2も最新版に入れ替えた上で、セットアップ処理コードを一部変更しています。

計測内容

  • バージョンは、Spring 2.0.4 / Guice 1.0 / Seasar2 2.4.12
  • インスタンス取得はAOP有りとAOP無しの両方を計測(前回は有りのみでしたが、今回は無しも計測しました)
  • 全てプロトタイプ(毎回新しいインスタンスを取得)
  • 取得したインスタンスの実行時間は、AOP有りのみ計測(AOP無しは変わらないはずなので)
  • 留意して欲しい事項は前回の前置きにあります

ベンチマーク結果

- get instance (NO AOP)-
Spring:  24,336 creations/s
Guice:   304,878 creations/s
S2:      26,553 creations/s

- get instance (WITH AOP) -
Spring:  3,967 creations/s
Guice:   45,065 creations/s
S2:      26,232 creations/s

- call service (WITH AOP) -
Spring:  101,971 calls/s
Guice:   843,340 calls/s
S2:      1,270,329 calls/s


- get instance (NO AOP)-
Spring:  24,618 creations/s
Guice:   304,878 creations/s
S2:      25,806 creations/s

- get instance (WITH AOP) -
Spring:  3,766 creations/s
Guice:   42,662 creations/s
S2:      26,448 creations/s

- call service (WITH AOP) -
Spring:  103,727 calls/s
Guice:   959,881 calls/s
S2:      1,271,474 calls/s

前回と比べると、インスタンス取得処理でSpringのチューニング成果が如実に現れていますね。AOP有りも無しもGuiceとの差が10倍くらいまで縮まり*1、AOP無しではSeasar2とほぼ並んだと言って良さそうです。
逆にSpringはAOPのインスタンス取得や実行の遅さが際立ちますが、AspectJを使うとだいぶ数値が違ったりするんでしょうか。やはり試さないといかんかも。
それと、S2がAOP有り無しでパフォーマンスが変わらないのが驚きです*2。weaveするタイミングが他のコンテナと違うとかなのでしょうか?でも実行は一番速いから、単純に遅延してるとかでは無さそうだし…。

実行したベンチマークコード、変更点などは

以下のwikiに置きました。
Guice, Spring, Seasar2 ベンチマーク(第2回)
なお前回はページタイトルがSpringではなく"Sring"になっているという大変恥ずかしい事になっていたので(しかしオレンジニュースに載ったので変えたりデリゲートする勇気が無かった)、今回は気をつけました:-)

wikiなので、改善点や追加、情報などありましたら書き込んで頂けると嬉しいです。

*1:「まだ10倍かよ!」という意見もあると思いますが、使う立場の私個人としてはこの辺の数値をもともとあまり気にしていないのと、ライフサイクルサポートなど機能が異なるので、Spring頑張ったなぁというのが素朴な感想です

*2:計測コード間違ってなければ…