当前位置: 首页 > 面试题库 >

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

祁权
2023-03-14
问题内容

我正在使用Java
JDBC应用程序从数据库中获取约500,000条记录。使用的数据库是Oracle。取出每一行后,我立即将数据写入文件。由于完成整个数据的获取大约需要一个小时,因此我试图增加结果集的获取大小。我已经在多个链接中看到,在增加访存大小的同时,应该注意内存消耗。增加获取大小实际上是否会增加jvm使用的堆内存?
假设获取大小为10,并且程序查询总共返回100行。在第一次读取期间,结果集包含10条记录。读取前10条记录后,结果集将获取下10条记录。这是否意味着在第二次获取后,数据集将包含20条记录?较早的10条记录是否仍保留在内存中,还是在获取较新的批次时将其删除了?任何帮助表示赞赏。


问题答案:

这取决于。不同的驱动程序可能会有所不同,并且不同的ResultSet设置可能会有所不同。

如果你有CONCUR_READ_ONLYFETCH_FORWARDTYPE_FORWARD_ONLY
ResultSet,司机几乎肯定会积极地存储在内存中的行数对应于您的获取大小(较早行,当然数据将保留在内存中一段时间,直到它被收集的垃圾)。TYPE_SCROLL_INSENSITIVE
ResultSet另一方面,如果您有一个,驱动程序很有可能会将获取的所有数据html" target="_blank">存储在内存中,以便允许您在数据之间来回滚动。这不是实现此行为的唯一可能方法,因此不同的驱动程序(和不同版本的驱动程序)可能具有不同的行为,但这是我遇到的大多数驱动程序的最简单方式。



 类似资料:
  • 我使用一个java jdbc应用程序从DB中获取大约500,000条记录。使用的数据库是Oracle。当每一行被取出时,我就将数据写入文件。由于获取整个数据需要大约一个小时,所以我尝试增加结果集的获取大小。我在多个链接中看到,在增加读取大小的同时,应该小心内存消耗。增加读取大小实际上会增加jvm使用的堆内存吗?< br >假设提取大小为10,程序查询总共返回100行。在第一次提取期间,结果集包含1

  • 问题内容: 我阅读了JVM内存模型,并对以下内容感到困惑: JVM是否将.class实例存储在其内存中。如果是,则在哪个区域。 就像在加载类后,JVM生成了机器级代码,然后开始执行机器代码指令,然后仅在堆上创建对象,并填充了方法区域。 perm gen等区域存储字节码还是机器级代码? 烫发与方法面积 我真的很感谢您对此主题的任何帮助。 谢谢。 问题答案: 1)文件将在加载时存储在permgen存储

  • 在具有管道和转发功能的MIPS体系结构上: add指令将在步骤3(执行操作)准备好结果,但我假设sw指令希望在步骤2(指令解码)得到结果 David A. Patterson的《计算机组织与设计》一书中有一个已解决的练习:在以下代码段中找到危险并重新排序指令以避免任何管道停滞: 解决方案: 在解决方案中,它正确识别加载使用危险并相应地重新排列代码,但是否也存在执行存储危险?

  • 主要内容:程序员的幽默计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。 要想学习编程,就必须了解二进制,它是计算机处理数据的基础。 内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。

  • 我有一个df1,看起来像这样: 第二个df2看起来像这样: 我想检查df1中的所有父ID是否都存在于df2中。如果没有,我想在新的df中提取它们,例如: 我相信可以使用连接,但我不确定如何使用

  • JVM内存分为:1.方法区2.堆区3.堆栈4.PC寄存器5.本机堆栈 > 现在假设我有一个属性为“int[]dealCodes”(int基元数组)的类。根据内存管理,一旦处理代码初始化,内存中就会有连续内存分配(total_elements*4字节)。所以,如果数组大小为10,则JVM内存中有40字节的分配。 我的问题是,这40个字节将分配到哪个区域(堆还是堆栈)? 我对数组的理解是:它就像任何其