在研究了一下工作之后,我注意到我正在使用的应用程序使用默认的抓取大小(对于我所知的Oracle,这是10)。问题是,在大多数情况下,用户获取大量数据(从几千到几十万),默认10是一个巨大的瓶颈。JDBC/Hibernate抓取大小和内存问题
因此,这里明显的结论是使提取大小更大。起初,我正在考虑将默认设置为100,并将其提升到1000以进行多个查询。但是后来我在网上看到,为了防止内存问题(即JVM堆不能处理这么多数据),默认值太小,我应该担心它吗?
我还没有看到任何进一步的解释。这是否意味着更大的获取大小意味着在获取结果集时会有更多开销?或者他们只是说,在默认情况下,我可以获取10条记录,然后对它们进行GC处理并获取另外10条记录等等(而让我们说一次读取10000条记录会导致OutOfMemory异常)?在这种情况下,我不会在乎,因为我需要记忆中的所有记录。在前一种情况下(更大的结果集意味着更大的内存开销),我想我应该先加载测试。
嗯所以基本上,当将读取大小从10跳到100时,我可以说100我只在堆上获得了90多个jdbc对象,并且在调用之后它们将被GCed(所以所有时间我将在堆中至多有100个jdbc对象) ? – 2011-12-18 16:46:16
是的,属于迭代的'ResultSet'的100个jdbc对象。或者,至少,这将被认为是一个合理的实现......它不是由JDBC规范AFAIK强制的。 – yair 2011-12-18 17:26:14