我想从循环中读取mysql数据库中的序列化对象,并在java中对它执行一些操作。 我已经写了下面的函数,用于从ResultSet对象返回对象。java内存不足异常(jdbc)
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
占用。 但我不完全确定发生了什么问题。
您可以使用['getBinaryStream'](http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getBinaryStream(int))而不是['getBytes'] (http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getBytes(int))? – MadProgrammer
数据库中的数据块有多大? –
在byte [] buf = res.getBytes(3);之后关闭ResultSet; – Munesh