[mayaa-dev:11] パフォーマンスに関して

suga ko.suga @ gmail.com
2006年 11月 23日 (木) 22:37:45 JST


suga です。

パフォーマンス向上のためのメモ書き的なものです。
OutOfMemory になるケースを探すためプロファイラで測定してみたので、
ついでという感じです。(OutOfMemory になるケースはまだ見つけられていません)


NetBeans 5.5 のプロファイラで測定してみたところ、HashMap#get と
ThreadLocal#get が上位にあります。
その他、DoubleByteEncoder#encodeArrayLoop など文字コード関連が
遅いようです。無駄に使っていないか調査する必要があるでしょう。

一番遅かったのが ProviderFactory#getEngine で synchronized していた
部分でしたが、ここは Engine と default.mayaa とを分離した結果、
synchronized が不要になったので外しました。


また、1.1.2 から 1.1.3 の間で、速度が少し低下しています。
これは MayaaContext 導入のため、ThreadLocal 呼び出し回数が大幅に増えて
しまったためだと思います。

SeasarCon のときに使ったサンプルをプロファイラで見てみたところ、
下記のメソッドが回数 * 秒数で上位に来ています。

org.seasar.mayaa.FactoryFactory#isInitialized()
org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport#getChildProcessorSize()
org.seasar.mayaa.FactoryFactory#getFactory(Class)
org.seasar.mayaa.FactoryFactory#getInstance()
org.seasar.mayaa.MayaaContext#getFactoryFactory()
org.seasar.mayaa.MayaaContext#getCurrentContext()

このうち TemplateProcessorSupport 以外はすべて MayaaContext 依存です。
MayaaContext は Mayaa の jar を Tomcat の shared などに置けるように
するためのものですのではずせないとしても、もう少し ThreadLocal を
呼び出す回数を減らす形にできるかどうか検討したいと思います。

-- 
suga ( ko.suga @ gmail.com )


mayaa-dev メーリングリストの案内