使用xstream解析大型xml文件时的OutOfMemoryError

时间:2014-04-10 10:33:41

标签: java xml marshalling xstream unmarshalling

我在阅读大型XML个文件“100 MB”时遇到问题并使用xstream解析它总是出现以下错误

java.lang.OutOfMemoryError: Java heap space error occurs,

这是解析XML的代码

XStream xstream = new XStream();
xstream.processAnnotations(Class.forName((String)ClassName));

ClassName是一个普通类,其字段包含xml注释。

然后使用

Object resultDto = xstream.fromXML((String)fileString);

fileString:将xml文件作为输入流读取后放入字符串缓冲区。

上面的代码适用于小文件,但不适用于大文件,请问有什么想法吗?

5 个答案:

答案 0 :(得分:2)

不要将文件转换为String然后使用Xstream,而是直接使用输入流或文件阅读器。 XStream.fromXML采用File,InputStream,FileReader之类的各种输入,直接操作,无需先将File的文本表示形式加载为String。

答案 1 :(得分:1)

据我所知,有两种解决方案:

  1. 增加堆空间。
  2. 使用SAX解析器而不是DOM解析器(不确定是否可以使用xstream执行此操作)。
  3. 最后,数据可能太大而不适合。

答案 2 :(得分:0)

您可以使用运行时参数运行解析程序吗? 在这种情况下,添加参数 -xmx512M -xms512M 应该可以解决问题,因为它会增加堆大小。

答案 3 :(得分:0)

尝试增加java头部内存。 如果你正在使用eclipse。 然后有eclipse,ini文件就在那里,

增加头部尺寸。

-XX:MaxPermSize=1024m
-Xms512m
-Xmx1024m

答案 4 :(得分:0)

RAM大小是多少?如果你有更多的RAM使用 -

为你的JVM分配更多
Xms512m -Xmx2g -XX:PermSize=512m  -XX:MaxPermSize=2g

如果你有8GB的RAM,你可以按照上面的例子分配它分配2GB最大堆内存和2GB最大PermGen空间,所以总共4GB。或者根据你的RAM