Java ResultSet中的AllocargeObjectorArray内存不足

Java ResultSet中的AllocargeObjectorArray内存不足,java,jdbc,bea,Java,Jdbc,Bea,我使用JDBC获取大量数据。调用成功完成,但调用resultSet.next时,出现以下错误: java.lang.OutOfMemoryError: allocLargeObjectOrArray - Object size: 15414016, Num elements: 7706998 我试图增加JVM内存大小,但这并不能解决问题。我不确定这个问题是否可以解决,因为我没有使用JDBC访问数据库,而是系统通过JDBC访问BEA AquaLogic服务 有人遇到过此错误吗?请注意,在第一次r

我使用JDBC获取大量数据。调用成功完成,但调用resultSet.next时,出现以下错误:

java.lang.OutOfMemoryError: allocLargeObjectOrArray - Object size: 15414016, Num elements: 7706998
我试图增加JVM内存大小,但这并不能解决问题。我不确定这个问题是否可以解决,因为我没有使用JDBC访问数据库,而是系统通过JDBC访问BEA AquaLogic服务


有人遇到过此错误吗?

请注意,在第一次resultSet.next调用之前,结果可能尚未从数据库中读取,或者仍然位于其他缓存结构中的某个位置

您应该尝试限制您的选择以返回合理数量的结果,如果您需要所有数据,可以重复调用,直到没有更多结果为止

增加JVM内存大小不会有帮助,除非您可以确保JDBC调用返回的数据量有绝对限制

此外,通过JDBC访问任何服务本质上归结为使用JDBC:


另一个不太可能的可能性是,您正在使用的JDBC驱动程序中存在错误。如果可能,请尝试其他实现,并检查问题是否仍然存在。

您可以尝试在语句中设置setFetchSizeint rows方法。
但是setFetchRows只是一个提示,这意味着它可能无法实现。

尝试将内存大小增加到1.2g,例如,-mx1200m,或者比您机器的物理内存小一些。你可能会发现它一次读取的数据比你想象的要多。

首先,弄清楚你是否真的需要一次在内存中获取那么多数据。RDBMS擅长于聚合/排序/etc大型数据集,如果可能的话,您应该尝试利用这一点


如果不是的话,你真的,真的需要那么多的数据在工作记忆中的某些原因。。。而增加JVM的内存参数并没有提高足够的门槛。。。查看内存中的分布式缓存解决方案,如COTS或TerraCotta开源。

从数据库返回多少行?像kosi2801一样,我建议只获取数据的一个子集,从一个合理的数字开始,然后增加以找到阈值

你能发布一个更完整的堆栈跟踪吗?你想从数据库中读取什么?我增加了内存,以至于JVM无法启动应用程序,因为它说我指定的内存太高了。我的机器也不是最强大的。我不会怀疑JDBC驱动程序是罪魁祸首。但是,我不能尝试任何其他实现,因为这是BEA特有的。还有其他方法可以获取我正在寻找的信息,但目前这将是一个很大的倒退。我还没有时间真正弄清楚这个问题。同时,我似乎能够在没有任何错误的情况下获得返回的数据。我相信我的案子无论如何都是边缘案件。接受这个答案是因为它是最有力的。