mysql データベースからシリアル化されたオブジェクトをループで読み取り、Java でいくつかの操作を実行しようとしています。ResultSet オブジェクトからオブジェクトを返すために、次の関数を作成しました。
public static MyObj deSerializeCacheTagInfo(ResultSet res
) throws SQLException, IOException, ClassNotFoundException
{
byte[] buf = res.getBytes(3);
ObjectInputStream objectIn = null;
if (buf != null)
objectIn = new ObjectInputStream(new ByteArrayInputStream(buf));
MyObj info = (MyObj)objectIn.readObject();
return info;
}
このコードを実行すると、メモリ不足の例外が発生します。少し調べてみたところ、結果セットが大きく、メモリに保持されていることが原因である可能性があることに気付いたので、一度に約50行をフェッチしてみました。
しかし、それも役に立たないようです。
visualvm でプロファイリングすると、すべてのスペースが によって占有されていることが報告されbyte[] objects
ます。しかし、何が問題なのか完全にはわかりません。