虽然 JDBM3 数据库承诺(据我所知)在访问和写入数据时使用非常小的内存,但我有以下问题:即使在 TreeMap 的键集中迭代时,似乎所有数据都加载到内存中。所以下面的代码:
db=DBMaker.openFile("Myfile")
.make();
SortedMap<Integer, double[]> MyMap=db.getTreeMap("MyMap");
int i=0;
final Set<Integer> keySet = MyMap.keySet();
for (Object key : keySet) {
System.out.println(i++);
}
导致将所有双精度矩阵加载到内存中,最后导致 OutOfMemory 错误。在我看来,加载的 GB 也比数据本身多得多。到目前为止我考虑的事情是:
这是一个错误吗?或者在创建/打开数据库(缓存、事务?)时有一些参数会禁用此“功能”?
这是我使用的 JDBM3 alpha 3 中的一个错误(当有 alpha 4 时)?我只需要在切换之前验证这一点,因为不兼容,我必须从头开始做所有事情。
更新的 MapDB(以前的 JDBM4)会发生这种情况吗?我还需要在切换之前验证这一点。
还是出于某种原因这是图书馆的正常行为?