我正在使用Sesame通過SPARQL查詢RDF。我使用大文件(2GB,10GB)並隨後執行幾個查詢。在處理這些大文件時,我收到一個錯誤java.lang.OutOfMemoryError:Java堆空間。我運行我的應用程序與參數-Xmx3g但它似乎是不夠的這些文件。也許我應該在每次查詢後關閉一個存儲庫?芝麻Java OutOfMemoryError
有我的代碼:
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