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がロードされているように私には思えます。私がこれまでに検討したことは次のとおりです。
これはバグですか?または、データベースを作成/開くときに、この「機能」を無効にするいくつかのパラメーター(キャッシュ、トランザクション?)がありますか?
これは私が使用しているJDBM3alpha3のバグですか(alpha 4がある場合)?互換性がなく、すべてを最初から行う必要があるため、切り替える前にこれを確認する必要があります。
これは新しいMapDB(以前のJDBM4)で発生しますか?また、切り替える前にこれを確認する必要があります。
それとも、これは何らかの理由でライブラリの正常な動作ですか?