我最近将HQLDB从1.8迁移到2.x,然后我的集成(内存中)测试开始使用太多内存。将内存增加到6GB会使测试变得更快,但仍会在某些时候设法冻结。
我有属性shutdown = true;在url参数上添加hsqldb.write_delay = false将没有任何区别。
在升级之前它没有任何问题。我在迁移指南http://hsqldb.org/web/hsqlFAQ.html
中找不到任何提示答案 0 :(得分:3)
如果您只更改了HSQLDB版本并且它开始出现内存问题,那么这是一个内存泄漏错误。
升级到HSQLDB版本2.3.1,因为2.0
之后有关于内存泄漏的错误修复,请参阅自 2.0 here以来的更改列表,其中一个错误修复说:
修复了导致基于磁盘的速度降低和内存泄漏的问题 结果集
使用HSQLDB减少内存消耗:
使用这种语法创建表肯定会减少内存消耗,就像这些表存在于磁盘上一样,只有一部分加载到内存中:
CREATE CACHED TABLE YOUR_TABLE_NAME
确认HSQLDB是问题:
您可以使用Visual VM始终对应用程序进行内存配置文件以确认高内存消耗的原因。这是一个已与JDK一起安装的工具,可以通过命令行使用命令jvisualvm
启动。
选中此6 minutes tutorial video,了解它如何帮助解决内存问题。
答案 1 :(得分:2)
目前HSQLDB中没有内存泄漏。在使用内存数据库时,需要在测试期间删除插入数据库的数据。似乎数据未在您的应用中发布。
确保模式中所有表及其数据的最简单方法是:
DROP SCHEMA schemaname CASCADE
或者在一系列测试后SHUTDOWN数据库:
SHUTDOWN
在完成一些测试以释放所有数据后,使用您的模式名称执行上述语句。
从版本1.8.0改变的主要内容是支持事务。 Hibernate以不同的方式处理新版本。因此,您需要检查某个连接是否保持打开状态,因此在最后一个连接关闭时执行SHUTDOWN。