gpt4 book ai didi

java内存不足异常(jdbc)

转载 作者:行者123 更新时间:2023-11-29 06:03:19 25 4
gpt4 key购买 nike

我试图在循环中从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[] 对象占用。但我不完全确定出了什么问题。

最佳答案

默认情况下,MySQL JDBC 驱动程序将完整的结果集提取到内存中。

您可以将其更改为流式获取,如下所示:

Statement st = connIn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
st.setFetchSize(Integer.MIN_VALUE);

只进、只读结果集与获取大小 Integer.MIN_VALUE 的组合充当驱动程序的信号,以逐行流式传输结果集。此后,将逐行检索使用该语句创建的任何结果集。

关于java内存不足异常(jdbc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12790193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com