我的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。