TOPシステム開発> AOPのweaving処理
パフォーマンス徹底比較!! Seasar2 VS Spring
パフォーマンス徹底比較!! Seasar2 VS Spring

第4回:AOP機能のパフォーマンス比較
著者:株式会社電通国際情報サービス  比嘉 康雄
         株式会社アークシステム  本間 宏崇
         日本ヒューレット・パッカード株式会社   2006/7/6
前のページ  1  2  3   4  次のページ
AOPのweaving処理

   次はweavingにかかる時間を見ましょう。バイトコードを書き換えるため、先ほどのメソッド呼び出しに比べると差が出ると考えられます。

   まずはweavingを行うクラスを直接呼び出して測定しました。Seasar2ではAopProxy、SpringではProxyFactoryというクラスです。
測定プログラム

   測定プログラムは以下のようになります。

プログラム(Seasar2)
DecimalFormat format = new DecimalFormat("00000");
MethodInterceptor interceptor = new GreetInterceptor();
long start = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
   final Class clazz = Class.forName("xxx.NullBean" + format.format(i));
   Pointcut pointcut = new PointcutImpl(new String[] { "toString" });
   Aspect aspect = new AspectImpl(interceptor, pointcut);
   AopProxy aopProxy = new AopProxy(clazz, new Aspect[] { aspect });
   Object proxy = aopProxy.create();
}
long end = System.currentTimeMillis();
// end - startを記録

プログラム(Spring)
DecimalFormat format = new DecimalFormat("00000");
Advice advice = new GreetInterceptor();
JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
pointcut.setPattern(".*toString");
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(pointcut, advice);
long start = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
   final Class clazz = Class.forName("xxx.NullBean" + format.format(i));
   Object instance = clazz.newInstance();
   ProxyFactory factory = new ProxyFactory(instance);
   factory.setProxyTargetClass(true);
   factory.addAdvisor(advisor);
   Object proxy = factory.getProxy();
}
long end = System.currentTimeMillis();
// end - startを記録


結果

   AOPのweaving処理は図3のような結果となります。

AOPのweaving処理
図3:AOPのweaving処理

   3倍ほどSeasar2が速い結果になりました。差は1,000回のweavingで8秒となり、これまで測定した中でも大きな値です。またweavingにかかる実際の時間が大きい点も見逃せません。


理由

   これはおそらくJavassistとCGLIBの性能差と考えられます。先ほどのAOPのメソッド実行向けにはチューニングを行っているのですが、weaving向けのチューニングは特に行っていないため、そのものの性能差といえるでしょう。

前のページ  1  2  3   4  次のページ


株式会社電通国際情報サービス  比嘉 康雄
著者プロフィール
株式会社電通国際情報サービス  比嘉 康雄
1992年、電通国際情報サービス入社。1996年にOracleに触れたことでソフトウェアの魅力に開眼。その後、日本産オープンソース「Seasar」の開発を中心になって行い、2004年5月に「Seasar2」をリリース。
http://www.isid.co.jp/
http://d.hatena.ne.jp/higayasuo/

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

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

INDEX
第4回:AOP機能のパフォーマンス比較
  はじめに
  AOPメソッド実行の処理
AOPのweaving処理
  AOP自動登録