我的java应用程序在其结果集中提取了大约200,000条记录。
尝试从Oracle DB获取数据时,服务器抛出 java.lang.OutOfMemoryError:Java堆空间
解决这个问题的一种方法是IMO,它是以较小的块(比如每次获取100,000个记录或甚至更小的计数)从DB中获取记录。我该怎么做(意味着使用什么API方法)?
请建议如何执行此操作,或者如果您认为有更好的方法来克服此内存空间问题,请建议。我不想像-Xmx那样使用JVM参数,因为我读到这不是处理OutOfMemory错误的好方法。
答案 0 :(得分:1)
如果您使用的是Oracle DB,则可以将AND ROWNUM < XXX
设置为SQL查询。这将导致在查询中仅提取XXX-1行。
其他方法是在执行语句之前调用statement.setFetchSize(xxx)
方法。
设置更大的JVM内存池是个坏主意,因为将来可能会有更大的数据集导致OOM。