从HSQL DB 1.8迁移到2.x内存问题

时间:2014-01-10 03:53:56

标签: hibernate integration-testing hsqldb

我最近将HQLDB从1.8迁移到2.x,然后我的集成(内存中)测试开始使用太多内存。将内存增加到6GB会使测试变得更快,但仍会在某些时候设法冻结。

我有属性shutdown = true;在url参数上添加hsqldb.write_delay = false将没有任何区别。

在升级之前它没有任何问题。我在迁移指南http://hsqldb.org/web/hsqlFAQ.html

中找不到任何提示

2 个答案:

答案 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。