(その8) Seasar2をAOPパフォーマンス比較対象に追加

id:koichikさんに「S2も比較に追加して」というコメントを頂いたので、言われた通りの方法で追加して試しました。Seasar2のテストコードはま!さんのSeasar2用コードにkoichikさんの記述を追加しただけのものです。Seasar2は触った事がないのでシングルトンかどうか分からなかったのですが、デバッグしながら見たらinjectされたオブジェクトのIDが呼び出しのたびに異なっていたので、毎回インスタンス化しているのだろう(=条件は同じだろう)と判断しました。また、上記Springの訂正も含まれています。

最初の3回の結果は以下です。Springにとってはちょっと….

Spring: 1,734 creations/s
Guice: 35,161 creations/s
S2: 18,395 creations/s

Spring: 1,776 creations/s
Guice: 37,202 creations/s
S2: 19,394 creations/s

Spring: 1,783 creations/s
Guice: 36,764 creations/s
S2: 19,164 creations/s

なおこの数値を見るに当たって留意して頂きたい事項があります*1
数値を鵜呑みにしないで下さい

  • 上記訂正にもありますように、まず私のテストコードが何か間違っている可能性があり、それぞれに造詣が深い方が行ったら大きく違う結果になるかもしれません。
  • Springは2.0で前面にプッシュしているAspectJを使った場合も試すべきだと思っています(実はちょっとだけトライしたのですが、よく理解していないため上手く動かず…。がっくり。
  • パフォーマンス検証はとかく揉めやすいので、最低でもコードを公開しなければ評価できないです。上記テストは基本的にGuice付属のコードにのっかっているので、気になる方は抜粋した部分をもとに試して頂ければと思います*2
  • 実際のアプリではシングルトンを使用するケースも多いと思います。*3
  • そもそもこの比較コードは純粋にDIやAOPしか実行していないので、実行時間に占めるそれらの処理の割合は実際のアプリケーションと全く異なります*4

という事で、どこかでどなたかがちゃんとした比較を行ってくれる日を待ちつつ、Guiceを引き続き見ていきたいと思います。
ちなみにSpringとS2のAOPのパフォーマンス比較はこちらにちゃんとしたものがあります。shot6さんの指摘やこの記事を考え合わせると、AOP無しで10倍以上違ったSeasar2AOPありでは2倍くらいになっているのは、CGlibとJavassistの差によるものが大きいのかも知れないですね。

追加

Seasar2スタックトレース

PerformanceComparison$BarImpl$$EnhancedByS2AOP$$1217e67(PerformanceComparison$BarImpl).getTee() line: 322
PerformanceComparison$BarImpl$$EnhancedByS2AOP$$1217e67.$$getTee$$invokeSuperMethod$$() line: not available
PerformanceComparison$BarImpl$$EnhancedByS2AOP$$1217e67$$MethodInvocation$$getTee0.proceed() line: not available
DummyInterceptor.invoke(MethodInvocation) line: 10
PerformanceComparison$BarImpl$$EnhancedByS2AOP$$1217e67$$MethodInvocation$$getTee0.proceed() line: not available
PerformanceComparison$BarImpl$$EnhancedByS2AOP$$1217e67.getTee() line: not available
PerformanceComparison$3.call() line: 234
PerformanceComparison$3.call() line: 1
PerformanceComparison.iterate(Callable, String) line: 268
PerformanceComparison.main(String[]) line: 78

*1:五月蝿かったらすみません

*2:勝手にソースを公開して良いのかどうか分からない為です。もしご存知の方は教えて下さい

*3:速度比はその場合もあまり変わらないかもしれませんが

*4:じゃあなんでこんなエントリをしているのかと言うと、興味本位です