重复lucene查询搜索时内存泄漏?

时间:2010-02-24 11:59:02

标签: java search memory-leaks lucene loops

基本上,我只想对给定的lucene索引进行多次搜索。

因此,我使用最终的“分析器”,“读者”,“搜索器”和“解析器”字段创建了一个类数据(所有这些都在构造函数中正确初始化)。该类还提供了一种搜索索引的“搜索”方法。这些都显示在下面的代码中。

然而问题是,在多次调用“搜索”(使用不同的查询)后,内存逐渐变满。我总是在使用相同的查询时没有检查会发生什么。我已经四处寻找可能的答案,似乎最好的做法是让搜索者等在不同的搜索中保持开放状态,所以我想这不是问题所在。还有其他想法吗?

谢谢,约阿希姆。

(示例)代码:

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 个答案:

答案 0 :(得分:2)

垃圾收集器可能会在应用程序内存不足之前的某个时刻释放内存。

我不明白为什么搜索方法会在内存中保存实例,但您可以使用JProfiler等分析工具进行确认。