[Seasar-user:13233] Re: [Teeda] @PageScopeを使用するとOutOfMemoryError
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 3月 11日 (火) 19:00:26 JST
小林 (koichik) です.
Date: Tue, 11 Mar 2008 14:02:02 +0900
From: "Tsutomu Uchima" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:13231] [Teeda] @PageScopeを使用するとOutOfMemoryError
> 添付したソースを実行し何度かsubmitを繰り返すと OutOfMemoryError が発生しま
> す。@PageScope の使い方が間違っているのでしょうか?
ページクラスの中で commons collections の
HashedMap が使われていますが,これが HOT deploy と
相性が悪いようです.
HashedMap を java.util.HashMap に置き換えると
OOME は発生しなくなります.
HOT deploy では,前のリクエストにおける
HotdeployClassLoader でロードされたクラスの
インスタンスを,新しいリクエストにおける
HotdeployClassLoader でロードされたクラスの
インスタンスに置き換えるために,バイト配列に
シリアライズ〜デシリアライズするという操作を
行っています.
詳細には調べてませんが,commons collections の
HashedMap はデシリアライズの際 (?) にバケットの
サイズを倍々に増やしていくようです.
そのため,20 回近くアクセスするとバケットのサイズが
数十 MB に達してしまい,OOME となります.
どうしても commons collectins を使わなくては
ならない理由があるのでしょうか?
もしないなら java.util のコレクションを使うことを
オススメします.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内