xstream序列化堆空间

时间:2012-04-10 09:32:06

标签: java xml xstream filewriter

我正在使用xstream将对象序列化为xml作为文件。我想序列化的对象非常大,由一个非常复杂的树结构组成。为此,我使用以下代码:

    XStream xStream = new XStream();

    xStream.omitField(Stat.class, "sources");
    String XMLFilename = "XML-" + dateString + ".xml";

    FileOutputStream outputStream = null;

    Writer writer = null;

    try {
        outputStream = new FileOutputStream(currentWorkPath+XMLFilename);
        writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
        xStream.toXML(ss, writer);

    } catch (Exception exp) {
        log.error(null, exp);
    } finally {
        writer = null;
        outputStream = null;
    }

代码工作正常,但在序列化非常大的对象时,我的内存错误是java堆空间。有什么方法可以防止这种情况吗?随着对象的增长,是否可以动态构建xml?

或者其他一些xml序列化库?

例外:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.addEntry(Unknown Source)
    at java.util.HashMap.put(Unknown Source)
    at com.thoughtworks.xstream.core.util.ObjectIdDictionary.associateId(ObjectIdDictionary.java:91)

谢谢, 詹姆斯福特

1 个答案:

答案 0 :(得分:0)

你是否在类路径上有Xpp3库(例如服务器上)?类路径上没有Xpp3(或其他类似库)的Java 5及更低版本的XStream使用DOM驱动程序。没有任何例子,我只能怀疑这一点。