SolrHTMLEntityManager Java кучи не хватает памяти - PullRequest
0 голосов
/ 22 марта 2012

Я обрабатываю тысячи документов в цикле, и я заметил, что когда Java-программа достигает определенного количества документов, возникает исключение нехватки памяти Java. Это происходит именно по этой строке:

 private String cleanForSolr(File file) throws IOException {

    fis = new FileInputStream(file);

    bis = new BufferedInputStream(fis);

    buffer = new byte[(int) file.length()];

    bis.read(buffer);

    fis.close();

    Pattern p = Pattern.compile("\\<.*?\\>");

    contents = em.clean(StringEscapeUtils.escapeHtml(p.matcher(new String(buffer)).replaceAll("")));

    return decoder.decode(ByteBuffer.wrap(contents.getBytes())).toString();
}

Я попытался установить параметры -Xms и -Xmx в конфигурации отладки Jbossstudio, но это не имеет значения.

Я не уверен, что он читает поврежденное содержимое файла в определенной части кода и просто не может с этим справиться. Или, если он накапливается в памяти и не может обрабатывать большое количество итераций и накапливать содержимое строки в JVM, которая является неизменной. Есть ли лучший способ написать этот код, чтобы использовать StringBuilder вместо String.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuffer.append(StringBuffer.java:224)
at java.lang.StringBuffer.append(StringBuffer.java:284)
at java.util.regex.Matcher.appendReplacement(Matcher.java:746)
at java.util.regex.Matcher.replaceAll(Matcher.java:813)
at 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...