在Java中从Oracle DB获取200,000条记录时出现OOM错误

时间:2013-11-23 15:46:03

标签: java jdbc out-of-memory heap

我的java应用程序在其结果集中提取了大约200,000条记录。

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

解决这个问题的一种方法是IMO,它是以较小的块(比如每次获取100,000个记录或甚至更小的计数)从DB中获取记录。我该怎么做(意味着使用什么API方法)?

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

1 个答案:

答案 0 :(得分:1)

如果您使用的是Oracle DB,则可以将AND ROWNUM < XXX设置为SQL查询。这将导致在查询中仅提取XXX-1行。

其他方法是在执行语句之前调用statement.setFetchSize(xxx)方法。

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