데이터를 액세스하고 쓸 때 JDBM3 데이터베이스가 매우 작은 메모리 사용을 약속하지만 다음과 같은 문제가 있습니다. TreeMap의 키 집합을 반복 할 때 모든 데이터가 메모리에로드 됨. 그래서 다음 코드를JDBM3에서 예기치 않은 메모리로드
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를로드하는 것으로 보입니다. 내가 지금까지 고려하신 사항은 다음과 같습니다
이 버그인가요? 또는이 "기능"을 비활성화하는 db (캐시, 트랜잭션)를 만들거나 열 때 몇 가지 매개 변수가 있습니까?
내가 사용하는 JDBM3 알파 3의 버그 (알파 4가있을 때)인가요? 호환성이 없기 때문에 전환하기 전에이를 확인해야합니다. 모든 것을 처음부터해야 할 것입니다.
더 새로운 MapDB (이전의 JDBM4)에 발생합니까? 또한 전환하기 전에이를 확인해야합니다.
또는 어떤 이유로이 기능이 정상적으로 작동합니까?
캐시를 비활성화하면 작동하지 않는다는 것에 유의하십시오. –
힙 분석기를 사용하여 메모리가 모두 어디에 있는지 확인 했습니까? – thkala
예, Netbeans 프로파일 러는 모든 벡터가 메모리에로드되었음을 보여줍니다. 나는 .get() 메서드를 사용하지 않았다 ... 키셋을 반복한다! –