gpt4 book ai didi

java - 将 DriverManager.getConnection 与 UCanAccess 一起使用时的内存消耗

转载 作者:搜寻专家 更新时间:2023-11-01 03:00:24 24 4
gpt4 key购买 nike

我将 JDBC 与 UCanAccess 一起使用,以便通过直接文件路径创建到 MS Access 文件的连接,以将特定表存储到 JSON 对象中。但是,我的代码行

conn = DriverManager.getConnection(s1+inFilePath, user, pass);

其中 conn 是一个未初始化的连接对象,它创建连接会导致某种内存泄漏,最终导致超过 GC 开销限制。

有什么办法可以解决这个问题吗?我尝试更改堆大小但没有结果。

最佳答案

这不是内存泄漏。 UCanAccess 正在消耗内存作为其正常操作的一部分。

UCanAccess 使用Access 数据库的HSQLDB“镜像”来支持SQL 操作,默认情况下,该镜像数据库是在内存中创建的。因此,如果您连接到一个包含 30 MB 数据的表的 Access 数据库,那么 UCanAccess 将使用大约 30 MB 的内存来存储镜像数据库。

;memory=false 附加到连接 URL 将告诉 UCanAccess 在磁盘上而不是在内存中创建 HSQLDB 镜像数据库。这将显着降低内存需求,但建立连接(即创建镜像数据库)也需要更长的时间。

UCanAccess 还“镜像”它在指定数据库中找到的所有表。因此,如果您只对使用名为“main.accdb”的数据库中的一个特定表感兴趣,那么您可以

  • 创建一个新的 Access 数据库,例如“link.accdb”
  • 在“link.accdb”中创建一个指向“main.accdb”中实际表的链接表,然后
  • 使用UCanAccess打开“link.accdb”。

使用上述过程,UCanAccess 只镜像了一张表。

还有其他几个选项可以控制 UCanAccess 的镜像行为;查看UCanAccess website了解详情。

关于java - 将 DriverManager.getConnection 与 UCanAccess 一起使用时的内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365444/

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