Google Guice(その5) パフォーマンス比較

Guiceのテストコードに含まれる、パフォーマンス比較測定を実行してみます。
内容は、以下のような依存関係を持たせたオブジェクトをひたすらコンテナから取得し続けて、1秒間に取得できた回数を表示するというものです。

Foo foo = new Foo();
foo.setI(5);
foo.setS("test");
Bar bar = new BarImpl(tee, 5);
Bar copy = new BarImpl(tee, 5);
foo.setBar(bar);
foo.setCopy(copy);

さて、実行したら*1以下のような結果が10回表示されました(どれも近い数値だったので1回分)

Spring: 3,603 creations/s
Guice: 152,207 creations/s
By Hand: 6,666,666 creations/s

GuiceはSpringの40倍くらいです。ちなみにBy Handというのは上記のように自力でnewしてsetするというDIコンテナ無しの実装です。
それにしても、速いのは間違いないですが100倍*2ではないですね。FUDなのか環境の違いなのかは分かりませんが…。

それと、パフォーマンスを気にするならAOPを使ったケースが気になるので、そちらのベンチマークも知りたいところ。パッと見そういったコードは含まれていないようなので、やるなら簡単にでも自力でテストコードを書く必要がありそうです。

*1:私のちょっと古いPC上で実行

*2:その1で最初「数百倍」と訳していたのですが、"some 100X faster"なので「約100倍」でした