gpt4 book ai didi

java - JDBC/Hibernate 获取大小和内存问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:21 27 4
gpt4 key购买 nike

在工作中进行一些调查后,我注意到我正在处理的应用程序正在使用默认的提取大小(据我所知,对于 Oracle 为 10)。问题是在大多数情况下,用户获取大量数据(从几千到几十万不等),默认的 10 确实是一个巨大的瓶颈。

所以这里显而易见的结论是使获取大小更大。起初我考虑将默认值设置为 100,然后将其设置为 1000 以用于多个查询。但是后来我在网上读到默认值很小以防止内存问题(即当 JVM 堆无法处理如此多的数据时),我应该担心吗?

我还没有在任何地方看到对此的进一步解释。这是否意味着更大的获取大小意味着获取结果集时的开销更大?或者它们只是意味着在默认情况下我可以获取 10 条记录,然后对它们进行 GC 并获取另外 10 条,依此类推(而假设一次获取 10000 条记录会导致 OutOfMemory 异常)?在这种情况下,我不会真正关心,因为无论如何我都需要内存中的所有记录。在前一种情况下(更大的结果集意味着更大的内存开销)我想我应该先对其进行负载测试。

最佳答案

也通过设置获取大小,您OutOfMemoryError 的风险。

您无论如何都需要所有这些记录这一事实可能是不合理的。您更有可能需要返回的 ResultSet 反射(reflect)的实体...将提取大小设置为 10000 意味着您正在堆放由 JDBC 类表示的 10000 条记录。当然,您不会通过您的应用程序传递这些信息。您首先将它们转换为您最喜欢的业务逻辑实体,然后将它们交给您的业务逻辑执行程序。这样,一旦 JDBC 提取下一个提取 block ,形成第一个提取 block 的记录就可用于 GC。

通常,正是由于上述内存威胁,这种转换一次完成一小部分。

但有一件事您是完全正确的:您应该在调整之前根据明确定义的要求测试性能。

关于java - JDBC/Hibernate 获取大小和内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com