有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

重复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) 个答案

  1. # 1 楼答案

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

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