在Java中从Oracle数据库获取200000条记录时出现OOM错误



我的java应用程序在其结果集中获取了大约200000条记录。

在尝试从Oracle数据库中获取数据时,服务器抛出java.lang.OutOfMemoryError:java堆空间

解决这个问题的一种方法,IMO,是以更小的块从DB中提取记录(比如说,每次提取100000条记录,甚至更少的计数)。我如何做到这一点(意味着使用什么API方法)?

请建议如何做到这一点,或者如果你认为有更好的方法来克服这个内存空间问题,请建议。我不想使用像-Xmx这样的JVM参数,因为我读到这不是处理OutOfMemory错误的好方法。

如果使用Oracle数据库,则可以将AND ROWNUM < XXX设置为SQL查询。这将导致在查询中只提取XXX-1行。

另一种方法是在执行语句之前调用statement.setFetchSize(xxx)方法。

设置更大的JVM内存池不是一个好主意,因为将来可能会有更大的数据集,这将导致OOM。

最新更新