Утечка памяти при повторных поисках lucene? - PullRequest
2 голосов
/ 24 февраля 2010

По сути, я просто хочу сделать много поисков по заданному индексу lucene.

Поэтому я создал класс Data с последними полями 'analyzer', 'reader', 'searcher' и 'parser' (все они правильно инициализированы в конструкторе). Класс также предоставляет метод поиска для поиска по индексу. Это все показано в коде ниже.

Проблема, однако, в том, что память постепенно заполняется после многих вызовов «поиска» (с разными запросами). Я не проверял, что происходит, когда всегда используется один и тот же запрос. Я уже искал возможные ответы, и, кажется, лучше всего держать поисковик и т. Д. Открытым для разных поисков, так что я думаю, что это не проблема. Есть другие идеи?

Спасибо, Иоахим.

(пример) код:

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 Ответ

2 голосов
/ 24 февраля 2010

сборщик мусора , вероятно, освободит память в какой-то момент, прежде чем приложению не хватит памяти.

Я не понимаю, почему экземпляры будут храниться в памяти методом поиска, но вы можете использовать инструмент профилирования, например, JProfiler для подтверждения.

...