[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 メーリングリストの案内