シリアライズの障害?
結構順調に進んでいた卒研ではあったけれどここにきて大きな穴に落ちてしまった。
論文の検索システムが論文300くらい登録していると検索中にOutOfMemoryErrorで落ちるのである。
これはまずいと、先生にも1000件くらいいれて検索しますと言っているだけに非常にまずい
というわけで原因の調査を開始した。
JprofilerというJavaのプロファイラTOOLを使ってどこでメモリを使っているかを調べてみると、ObjectInputStreamがほとんどのメモリを使っていることが判明した。
最初は、ああ、Close()してないのかなと思っていたけどいろいろ試してもまったくメモリの消費は減らなかった。orz
ググって英語のサイトを読んだり、時間のかかるテストを何度もやったりしたけど、一向にメモリは減らないし、もう駄目だって思ったその時!!!!!
結局謎はわからなかった。orz
それでも、プロファイラのObjectInputStreamがメモリを使っているという情報が
実はdeシリアライズ化したインスタンスのすべてを握っているから殆どのメモリを消費していると出力されていることだけがわかった。
しかし、元のインスタンスをシリアライズ化したバイナリの合計とはかけ離れた量になっておりその原因は結局さっぱりです。
結局シリアライズ化をしないでデータベースに直接データを書き込んで時間をかけて読み出す方法にすることにしますた。
これで直るといいなぁ・・・・・・
(でも実はシリアライズ化は特殊チックなバイナリ化を行っていてdeシリアライズでも
普通に再構築でもデータ量が同じだったらどうしよう 汗)