我试图循环从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占用了所有空间。
但是我不确定是怎么回事。

最佳答案

尝试在返回前添加objectIn.close();,可能会有所帮助

10-08 14:28