重复lucene查询搜索期间的java内存泄漏?
基本上,我只想在给定的lucene索引上进行多次搜索
因此,我用最终的“analyzer”、“reader”、“searcher”和“parser”字段创建了一个类数据(所有字段都在构造函数中正确初始化)。该类还提供了一个“搜索”方法来搜索索引。这些都显示在下面的代码中
然而,问题是,在多次调用“搜索”(使用不同的查询)之后,内存逐渐被填满。我没有检查始终使用相同查询时会发生什么。我已经四处寻找可能的答案,在不同的搜索中保持搜索者etc的开放性似乎是最好的做法,所以我想这不是问题所在。还有其他想法吗
谢谢你,约阿希姆
(示例)代码:
public class Data {
private final Analyzer analyzer;
private final IndexReader reader;
private final IndexSearcher searcher;
private final QueryParser parser;
public Data(String indexPath, Analyzer analyzer) throws IOException {
this.analyzer = analyzer;
Directory directory = FSDirectory.open(indexPath);
reader = new FilterIndexReader(IndexReader.open(directory, true));
directory.close();
searcher = new IndexSearcher(reader);
parser = new QueryParser(Version.LUCENE_CURRENT,
FieldName.CONTENT, analyzer);
}
public TopDocs search(String line, Integer maxHits) throws ... {
Query query = parser.parse(QueryParser.escape(line));
return searcher.search(query, maxHits);
}
}
# 1 楼答案
垃圾收集器可能会在应用程序内存不足之前的某个时间释放内存
我不明白为什么搜索方法会将实例保存在内存中,但您可以使用JProfiler之类的分析工具进行确认