Я использую Sesame для запроса RDF через SPARQL. Я работаю с большими файлами (2 ГБ, 10 ГБ) и потом выполняю несколько запросов. Во время работы с такими большими файлами я получаю сообщение об ошибке java.lang.OutOfMemoryError: Java heap space. Я запускаю свое приложение с параметром -Xmx3g, но похоже, этого недостаточно для этих файлов. Может быть, я должен закрыть репозиторий после каждого запроса?Java OutOfMemoryError with Sesame
Существует мой код:
void runQuery() {
try {
con = repo.getConnection();
TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
TupleQueryResult result = tupleQuery.evaluate();
while (result.hasNext()) {
result.next();
}
result.close();
con.close();
} catch (Exception e) {
...
}
}
}
runTests() {
File dataDir = new File("RepoDir/");
repo = new SailRepository(new NativeStore(dataDir));
repo.initialize();
...
for (int j = 0; j < NUMBER_OF_QUERIES; ++j) {
queryString = queries.get(j);
runQuery();
}
...
repo.shutDown();
}
Кроме того, можно использовать MemoryStore вместо NativeStore для таких больших файлов?
Пример запроса, который излучает ошибку:
SELECT DISTINCT ?name1 ?name2
WHERE {
?article1 rdf:type bench:Article .
?article2 rdf:type bench:Article .
?article1 dc:creator ?author1 .
?author1 foaf:name ?name1 .
?article2 dc:creator ?author2 .
?author2 foaf:name ?name2 .
?article1 swrc:journal ?journal .
?article2 swrc:journal ?journal
FILTER (?name1<?name2)
}
Получаете ли вы это OutOfMemoryError во время выполнения запросов? Это очень необычно. Как выглядят ваши запросы? Что касается использования хранилища памяти: я сомневаюсь, что вы можете поместить файл данных 10G в хранилище памяти, если у вас есть только 3G кучного пространства. –
@JeenBroekstra добавлен запрос – YAPPO