我正在使用JDBC和UCanAccess,以便通过直接文件路径创建与MS Access文件的连接,以将特定表存储到JSON对象中。但是,我的代码行
conn = DriverManager.getConnection(s1+inFilePath, user, pass);
其中conn是未初始化的Connection对象,它创建连接会导致某种内存泄漏,最终导致超出GC开销限制。
有没有办法解决这个问题?我试过改变堆大小没有结果。
答案 0 :(得分:3)
这不是内存泄漏。 UCanAccess正在消耗内存作为其正常运行的一部分。
UCanAccess使用HSQLDB"镜像" Access数据库支持SQL操作,默认情况下,在内存中创建镜像数据库。因此,如果连接到包含30 MB数据的表的Access数据库,则UCanAccess将使用~30 MB的内存来存储镜像数据库。
将;memory=false
附加到连接URL将告诉UCanAccess在磁盘而不是内存中创建HSQLDB镜像数据库。这将显着降低内存需求,但建立连接也需要更长时间(即创建镜像数据库)。
UCanAccess也是"镜像"它在指定数据库中找到的所有表。因此,如果您只对使用名为" main.accdb"的数据库中的一个特定表感兴趣。那么你可以
使用上述程序,UCanAccess仅镜像一个表。
还有其他一些控制UCanAccess镜像行为的选项;有关详细信息,请参阅UCanAccess website。