 |
|
前のページ 1 2 3 4 次のページ
|
 |
AOPメソッド実行の処理
|
ここでは非常にシンプルな処理を用います。シンプルだからこそAOPによるオーバーヘッドが明確にでると考えられます。
またバイトコードをカスタマイズするライブラリとして、Seasar2はJavassistを、SpringはCGLIBを使用しています(SpringではCGLIBの代わりにDynamicProxyを使う選択肢がありますが、測定結果はCGLIBの方が若干速かったためCGLIBの結果を用いています)。
|
測定プログラム
|
今回の測定に使用するプログラムを以下に示します。
コンポーネント
// もともとの処理
public class GreetingImpl implements Greeting {
public String greet() {
return null;
}
}
// カスタマイズして加える処理
public class GreetInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable {
invocation.proceed(); // もともとの処理を実行する
return "Hello";
}
}
|
「GreetingImpl#greet」がカスタマイズ対象になり、以下の設定ファイルによって「GreetInterceptor#invoke」が加えられます。
設定ファイル(Seasar2)
<components>
<component name="greeting" class="xxx.GreetingImpl">
<aspect>greetInterceptor</aspect>
</component>
<component name="greetInterceptor" class="xxx.GreetInterceptor" />
</components>
</code>
<緑>設定ファイル(Spring)</緑>
<code>
<beans>
<bean id="greetingTarget" class="xxx.GreetingImpl" />
<bean name="greetInterceptor" class="xxx.GreetInterceptor" />
<bean
name="greeting"
class="org.springframework.aop.framework.ProxyFactoryBean"
>
<property name="proxyInterfaces"><value>xxx.Greeting</value></property>
<property name="target"><ref bean="greetingTarget" /></property>
<property name="interceptorNames"><value>greetInterceptor</value></property>
</bean>
</beans>
|
実際に測定するプログラムは以下のようになります。またSpringも同様なプログラムです。
プログラム(Seasar2)
Greeting greeting = (Greeting) container.getComponent("greeting");
long start = System.currentTimeMillis();
for (int i = 0; i < times_; i++) {
greeting.greet();
}
long end = System.currentTimeMillis();
// end - startを記録
|
コンテナから1度だけ取り出し、カスタマイズされた「GreetingImpl#greet」を複数回実行します。
|
結果
|
結果のグラフを図2に示します。

図2:AOPのメソッド実行時間
図2をみるとわかるように3倍ほど差が付きましたが、実行回数が10,000,000回と多く、また実際の時間も小さいので、現実的には無視できる差といえるでしょう。
|
理由
|
Seasar2はバージョン2.1まではCGLIBを使用していましたが、バージョン2.2からJavassistを使用しています。その際に処理速度が3倍速くなったという経緯がありました。
これは単純にJavaassistが速いというわけではなく、Seasar2のバージョン2.2の時点で、Javaassistにチューニングを行ったことによるものです。CGLIBに比べるとJavassistはチューニングしやすく、それが今回の結果につながっていると考えられます。
|
前のページ 1 2 3 4 次のページ
|

|
|
|
|

|
著者プロフィール
株式会社アークシステム 本間 宏崇
プログラマ。2004年より(株)アークシステムに所属。最近の興味はペアプログラミング・テスト駆動開発・プロジェクト自動化など。現在はWebアプリケーションフレームワーク「Teeda (http://teeda.seasar.org/ja/)」の開発に携わっている。
|
|
|

|
著者プロフィール
日本ヒューレット・パッカード株式会社
今回、Seasar2とSpringのパフォーマンスの検証を行う際の環境を提供しています。
|
|
|
|