gpt4 book ai didi

java - jdbc数据集是否将所有行存储在jvm内存中

转载 作者:行者123 更新时间:2023-12-02 05:27:55 25 4
gpt4 key购买 nike

我正在使用 java jdbc 应用程序从数据库中获取大约 500,000 条记录。使用的数据库是Oracle。获取每一行后,我将数据写入文件。由于完成获取整个数据大约需要一个小时,因此我尝试增加结果集的获取大小。我在多个链接中看到,在增加获取大小的同时,应该注意内存消耗。增加获取大小实际上会增加 jvm 使用的堆内存吗?
假设提取大小为 10,程序查询总共返回 100 行。在第一次获取期间,结果集包含 10 条记录。一旦我读取了前 10 条记录,结果集就会获取接下来的 10 条记录。这是否意味着在第二次获取之后,数据集将包含 20 条记录?较早的 10 条记录是否仍保留在内存中,还是在获取较新批处理时将其删除?如有任何帮助,我们将不胜感激。

最佳答案

这要看情况。不同的驱动程序可能表现不同且不同ResultSet settings行为可能会有所不同。

如果您有 CONCUR_READ_ONLYFETCH_FORWARDTYPE_FORWARD_ONLY ResultSet,驱动程序几乎肯定会主动存储在内存 与您的提取大小相对应的行数(当然,较早行的数据将在内存中保留一段时间,直到被垃圾收集)。另一方面,如果您有一个 TYPE_SCROLL_INSENSITIVE ResultSet,则驱动程序很可能会将获取的所有数据存储在内存中,以便您可以滚动向后和向前浏览数据。这不是实现此行为的唯一可能方法,因此不同的驱动程序(以及不同版本的驱动程序)可能有不同的行为,但这是我遇到的大多数驱动程序最简单的行为方式。

关于java - jdbc数据集是否将所有行存储在jvm内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56217659/

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