我想從循環中讀取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