堆使用XStream的问题

时间:2014-11-12 02:56:17

标签: xml serialization out-of-memory heap xstream

我在使用XStream获取OutOfMemoryError,同时将Java转换为XML并写入文件。它发生在xstream.toXMl操作中。我能够在文件中写入大约200 MB的文件,并在控制台中显示700 MB的堆使用等等。但之后,我收到错误并且处理停止。

我正在使用XStream版本1.4.7和Java 1.7。

以下是代码:

 final File xmlFile =
            new File(System.getProperty("user.dir") + "\\" + "Test.xml");
        final Writer out =
            new BufferedWriter(new OutputStreamWriter(new FileOutputStream(xmlFile),
                    "UTF-8"));
        try {
            final Map values =  data from gemfire cache
            xstream.toXML(values, out);
            // final ObjectOutputStream outStream = xstream.createObjectOutputStream(out);
            // outStream.writeObject(values);
        } finally {
            out.close();
        }

我尝试执行以下操作以消除错误但无法正常工作。

1)。我尝试添加XPP3(来自org.ogce)1.1.6和XMLPULL(来自xmlpull)1.1.3.4a maven依赖项 2)。是final XStream xstream = new XStream(new StaxDriver());

3)。将eclipse.ini中的xms和xmx更改为1024m。这就是我的eclipse.ini的样子

-startup
 plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
 --launcher.library
 plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130807-1835
-vm
 C:/Program Files/Java/jdk1.7.0_51/bin/javaw.exe
-product
 org.eclipse.epp.package.standard.product
--launcher.defaultAction
 openFile
--launcher.XXMaxPermSize
 1024M
 -showsplash
 org.eclipse.platform
--launcher.XXMaxPermSize
 1024m
--launcher.defaultAction
 openFile
 --launcher.appendVmargs
 -vmargs
 -Dosgi.requiredJavaVersion=1.6
 -Xms1024m
 -Xmx1024m
 -Dorg.eclipse.swt.browser.IEVersion=10001
 -Dsubversion.native.library=C:/Program Files/SlikSvn/bin/libsvnjavahl-1.dll

4)。尝试使用ObjectStream,您可以在上面的代码中看到注释

5)。添加了运行时参数Xms1024m -Xss256k -Dinsight.enabled=false -XX:PermSize=512M -XX:MaxPermSize=512m

6)。添加了运行时参数- -XX:+UseConcMarkSweepGC

请告知..

1 个答案:

答案 0 :(得分:0)

当我将Java对象序列化为Xml时,我也意识到了这个问题。这里的根本原因是:您的java对象可能包含实例变量,它是共享变量,如单吨对象​​等。 对于这样的实例变量,你需要初始化变量这样一种方式,它将使用不使用单吨对象。您可以在类中创建新对象并分配给您的实例变量,因此在序列化此类实例变量时,它不会产生任何问题。

我已经解决了以前遇到同样错误的问题。

如果您需要进一步的帮助,请与我们联系。