微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

解决方法:

这取决于.不同的驱动程序可能会有所不同,而不同的ResultSet settings可能会有所不同.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐