使用HSQLDB CREATE TEXT TABLE打开数百个TEXT表时获取OOM的原因是什么

时间:2010-11-13 09:25:58

标签: hsqldb

使用-Xmx1024m投放,尝试打开100个CSV文件CREATE TEXT TABLESET TABLE SOURCE。在某个地方得到OOM。 试图将cache_scale减少到1.效果更好,但在某些时候仍然是OOM。 是什么原因?

我发现内存被积极地用于分配大量org.hsqldb.PointerNode个实例。有什么理由可以避免吗?

1 个答案:

答案 0 :(得分:1)

TEXT表是使用CSV(逗号分隔值)或类似文件作为其数据源的特殊表。这些表可以像任何SQL表一样用于查询和写入数据。

虽然数据存储在CSV文件中,但索引和指向数据行的指针存储在内存中。默认情况下,每个表上都有一个索引,如果有表,则还支持表的PRIMARY KEY。这些表的UNIQUE或FOREIGN KEY约束由内存索引备份。

cache_scale(使用HSQLDB 1.8.x)用于控制随时在内存中缓存的行数据量。较小的值会减少用于缓存数据的内存,但不会更改索引所需的内存。