当前位置: 代码迷 >> Java相关 >> in thread "main" java.lang.OutOfMemoryError: Java heap space
  详细解决方案

in thread "main" java.lang.OutOfMemoryError: Java heap space

热度:3473   发布时间:2013-02-25 21:50:39.0
Lucene 需要索引的文本文件太大,怎么解决?
我用的lucene版本是3.0.1,当我索引到某一个大文本文件是(大约有10M)报了内存溢出,也就说这个字符串太大了,我试过把虚拟机最大内存设置更大(-Xmx),可以解决问题,但是我想试着改代码来解决,不知道有没有哪位朋友遇到故噢累死问题,有什么好的解决办法没有?
以下是部分代码

Java code
String content = FileUtils.readFileToString(file, "UTF-8");Document document = new Document();document.add(new Field("content",content,Field.Store.YES,Field.Index.ANALYZED));document.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));indexWriter.addDocument(document);

抛出的异常:
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:515)

------解决方案--------------------------------------------------------
可以把大文件读出之后写入几个小的文件。然后再每个小的文件来索引吧。这是一个可行的办法。
另外一个就是,你可以设置只索引大文件前多少部分啊 ?比如说设置一下只索引前n行的内容。不知道有没有这个功能。如果没有的话你可以自己写一个。
  相关解决方案