[Seasar-user:3920] Re: S2Container-2.4.0-beta-3 リリース

小野 心 [E-MAIL ADDRESS DELETED]
2006年 6月 21日 (水) 18:14:23 JST


 ども、小野@狛江です。

 自己レスですが、軽くパフォーマンスチェックを行ったので、
発表をさせていただきます。なお、チェックプログラムに付い
ては、軽く作った物なのと、平均値を出して求めた物では無い
ので、その辺は突っ込まないでくださいm(_ _)m

 計測は、getComponent()メゾットで何回のインスタンス取得を、
何スレッドで行うかの時間です。計測した種類は、

10000回の取得を  1スレッド
 1000回の取得を 10スレッド
  100回の取得を100スレッド

 の3種類です。

 また、ついでに、S2Containerに手を入れて、synchronizedの
排除(簡単に見つかる範囲ですが)を行ってみた状態でも計測
してみました。主に、synchronizedが使われていたところは、

S2ContainerImpl#internalGetComponentDef
ComponentDefImpl#getComponentDeployer
ComponentDefImpl#getConcreteClass

※パッケージ名は省略します。

 で、

S2ContainerImpl#internalGetComponentDef

 に付いては、componentDefMapに対してJDK1.5のConcurrentHashMap
を利用して、排除しました。

ComponentDefImpl#getComponentDeployer
ComponentDefImpl#getConcreteClass

 については、nullチェックを

if ( nullChcck == null) {
    synchronized ( this ) {
        if ( nullChcck == null) {
            doWork();
        }
    }
}

 の形式にして排除しました。
※この適用で確実に問題が無いかは不明です。


 さて、測定結果ですが、10000回取得を1スレッド時を1として
おります。

<S2Containerがノーマルの場合>
10000回の取得を  1スレッド = 1
 1000回の取得を 10スレッド = 3.31
  100回の取得を100スレッド = 3.78


<S2Containerに手を入れた場合>
10000回の取得を  1スレッド = 1
 1000回の取得を 10スレッド = 1.87
  100回の取得を100スレッド = 2.15

 ちなみに、手を入れた場合には、ConcurrentHashMapの関係で
シングルスレッド時に1割ほど早くなっていました。

以上です。


======================================
=                                       ==
= 小野 心@狛江市                           ==
=              ^^世田谷区のポッチじゃないよ(^^); ==
===================================================




Seasar-user メーリングリストの案内