Java 基于HSQLDB的库速度非常慢:试图缩小bug搜索范围

Java 基于HSQLDB的库速度非常慢:试图缩小bug搜索范围,java,caching,hsqldb,Java,Caching,Hsqldb,我在Java项目中集成了一个第三方库。此库依赖于HSQLDB.jar。这个库——以及它附带的HSQLDB.jar版本——有点旧,最后一次更新是在2010年。它也相当大。在我的代码中,我循环数据点并调用库来执行一些计算。我注意到,处理所需的时间随着数据点的数量或多或少呈指数增长。例如,对于100分,与不使用库的版本相比差异很小;对于2000点,相差大约一小时;要获得5000分,需要几天才能完成,而没有它只需要几小时 我尝试将HSQLDB.jar更新到最新版本,但出现了一系列异常,因此我返回到旧版本

我在Java项目中集成了一个第三方库。此库依赖于
HSQLDB.jar
。这个库——以及它附带的
HSQLDB.jar
版本——有点旧,最后一次更新是在2010年。它也相当大。在我的代码中,我循环数据点并调用库来执行一些计算。我注意到,处理所需的时间随着数据点的数量或多或少呈指数增长。例如,对于100分,与不使用库的版本相比差异很小;对于2000点,相差大约一小时;要获得5000分,需要几天才能完成,而没有它只需要几小时

我尝试将
HSQLDB.jar
更新到最新版本,但出现了一系列异常,因此我返回到旧版本

我运行了
hprof
,它报告说总时间的很大一部分花在
org.hsqldb.persist.Cache.cleanUp
上。我现在试图做的是缩小我对问题所在和/或问题发生地点的搜索范围。由于只有在处理了大量输入数据时才会注意到这一点,所以在开始调试运行之前,我想做一些初步的“分类”

不幸的是,在这里我不能显示任何代码摘录,因为我不知道什么摘录是相关的


所以我的问题是:它在
org.hsqldb.persist.Cache.cleanUp
中花费太多时间这一事实是否表明了问题的根源?

org.hsqldb.persist.Cache.cleanUp
中花费的时间表明它的内存缓存设置很小,这会导致频繁的清除和从缓存中读取

您可以关闭应用程序,并使用较大的缓存设置手动编辑数据库的.script文件

有关详细信息,请参见HSQLDB指南:


您可以在.properties文件中找到数据库的确切版本,并从SourceForge下载该版本的zip包,并参考其指南以获取最大允许值。

org.hsqldb.persist.Cache.cleanUp
中花费的时间表明它有一个小的内存缓存设置,这会导致频繁的清除和读取缓存

您可以关闭应用程序,并使用较大的缓存设置手动编辑数据库的.script文件

有关详细信息,请参见HSQLDB指南:


您可以在.properties文件中找到数据库的确切版本,并从SourceForge下载该版本的zip包,并参考其指南以获取最大允许值。

谢谢!我在脚本文件中看到
SET FILES CACHE SIZE 10000
SET FILES CACHE ROWS 50000
。我可以试着把这些做大一点。但是,我正在处理的数据点彼此完全独立。我的系统的行为是否表明系统中存在某种泄漏,并且无论缓存有多大,在我处理足够的数据后,它最终都会慢到爬行或崩溃?我的系统打算作为一个服务器运行,24/7处理传入数据,不可能发生泄漏。速度取决于它们将点映射到数据库行的方式。一般来说,如果所有访问的点都适合缓存,那么它将在内存中以O(log n)的形式执行。谢谢!我在脚本文件中看到
SET FILES CACHE SIZE 10000
SET FILES CACHE ROWS 50000
。我可以试着把这些做大一点。但是,我正在处理的数据点彼此完全独立。我的系统的行为是否表明系统中存在某种泄漏,并且无论缓存有多大,在我处理足够的数据后,它最终都会慢到爬行或崩溃?我的系统打算作为一个服务器运行,24/7处理传入数据,不可能发生泄漏。速度取决于它们将点映射到数据库行的方式。通常,如果所有访问的点都适合缓存,那么它将在内存中以O(log n)的形式执行。