TOPシステム開発> リフレクション情報取得の比較
パフォーマンス徹底比較!! Seasar2 VS Spring
パフォーマンス徹底比較!! Seasar2 VS Spring

第1回:どっちが速いSeasar2 VS Spring
著者:株式会社電通国際情報サービス  比嘉 康雄
         株式会社アークシステム  本間 宏崇
         日本ヒューレット・パッカード株式会社   2006/5/18
前のページ  1  2  3  4
リフレクション情報取得の比較

   それでは次にリフレクション情報を取得する速度が実際にどれくらい違うのか測定してみましょう。

   今回は両コンテナのリフレクション情報の処理を行うクラスを直接呼び出して測定します。Seasar2ではBeanDescImpl、SpringではBeanWrapperImplというクラスです。
測定プログラム

   Seasar2での測定プログラムはこのようになります。

リフレクション情報取得プログラム(Seasar2)
long start = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
   String className = "xxx.NullBean" + format.format(i);
   Class clazz = Class.forName(className);
   BeanDescImpl beanDesc = new BeanDescImpl(clazz);
}
long end = System.currentTimeMillis();
// end - startを記録

   BeanDescImplをBeanWrapperImplにすると、Springの測定プログラムになります。


リフレクション情報取得の結果

   リフレクション情報の処理にかかる時間の結果は図3のようになりました。

リフレクション処理
図3:リフレクション処理

   Seasar2の方が速く、1,000個のリフレクション処理で1,300ミリ秒の差がつきました。


理由

   この差の理由には2つあると考えられます。

   1点目として、Seasar2ではリフレクション情報取得処理を独自実装していますが、SpringではJDKのIntrospectorを使用しています。この違いが速度の差となっていると思われます。

   2点目はキャッシュ実装の違いです。取得したリフレクション情報をSeasar2ではHashMapへ保持していますが、SpringではWeakHashMapへ保持しています。


おわりに

   本連載の第1回では非常にベーシックな機能の比較について紹介しました。単純にコンテナを生成してコンポーネントを取得するだけですが、これだけ差がついたことに驚かれている方も多いのではないでしょうか。

   次回はDI処理のパフォーマンス比較について紹介します。

前のページ  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
第1回:どっちが速いSeasar2 VS Spring
  はじめに
  コンテナ生成の比較
  コンポーネント取得の比較
リフレクション情報取得の比較