SolrHTMLEntityManager Java堆内存不足

时间:2012-03-22 14:47:32

标签: solr

我正在循环处理数千个文档,我注意到当Java程序达到一定数量的Document时,会抛出Java Heap Out of memory异常。它发生在这个特定的行上:

 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();
}

我已经尝试在Jbossstudio的调试配置中设置-Xms和-Xmx选项,但它没有什么区别。

我不确定它是否在代码的某个部分读取文件的损坏内容而无法处理它。或者,如果它在内存中累积,并且无法处理大量迭代并在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 

0 个答案:

没有答案