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

时间:2016-04-01 20:37:00

标签: java database jdbc ucanaccess

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

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

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

有没有办法解决这个问题?我试过改变堆大小没有结果。

1 个答案:

答案 0 :(得分:3)

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

UCanAccess使用HSQLDB"镜像" Access数据库支持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