[[SeasarWiki]]

*S2Dao使用時のメモリリークについて [#p8aca97c]
*Seasar FAQ [#p8aca97c]

●問題点~
SQL検索を実行していくと徐々にJVMのpermanent領域を圧迫しGCのタイミングでも開放されず~
java.lang.OutOfMemoryError: PermGen space が発生してしまう。~
※SQL検索は一度の実行ではなく複数回(本事象では500回程度)実行すると発生します。~
-[[S2Container>FAQ/S2Container]]
-[[S2AOP>FAQ/S2AOP]]
-[[S2JSF>FAQ/S2JSF]]
-[[S2Flex2>FAQ/S2Flex2]]
-[[S2DAO>FAQ/S2DAO]]
-[[S2Struts>FAQ/S2Struts]]
-[[S2RMI>FAQ/S2RMI]]
-[[Teeda>FAQ/Teeda]]
-[[Dolteng>FAQ/Dolteng]]
-[[S2JDBC-Gen>FAQ/S2JDBC-Gen]]

●環境~
OS:Windows2008Server~
Java:JDK V6.0.13~
DB:Microsoft SQLServer 2005 Standard Edition~
Tomcat:Tomcat V6.0.18~
(オプション設定)~
Xms512m~
Xmx512m~
XX:PermSize=512M~
XX:MaxNewSize=512m~
XX:MaxPermSize=512m~

●実装方法~
S2Daoで@SqlFileを使用しSQLの実行を行う。~
XXXXXConditionDtoを使用し引数を条件を受け渡す。~

SQLファイルを2つ用意する ※SQLの内容は同じ~
一方だけにWhere句にIf文を追加する~
例)~
/*IF BBB != null*/~
AND AAAA >= /*BBB*/~
/*END*/~
IF文の結果もfalseになるので実行されるSQLは全く同じ~

●結果~
IF文がないSQLファイルの場合 ⇒ OutOfMemoryErrorが発生しない~
IF文があるSQLファイルの場合 ⇒ OutOfMemoryErrorが発生~

S2DaoのIF文を解析するクラスがメモリに溜まっていると推測されますが~
解決方法はありますでしょうか?~
-[[Committer>FAQ/Committer]]
*過去のリソース [#l64b6699]
-[[質問こーなー(凍結)>AnsweringYourQuestions]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS