2014-11-12 1 views
0

Я получаю OutOfMemoryError с помощью XStream при преобразовании Java в XML и записи в файл. Это происходит при работе xstream.toXMl. Я могу записать около 200 МБ в файл с предупреждениями в консоли, в которых говорилось, что куча 700 мб используется и т. Д., Но после этого я получаю ошибку, и обработка прекращается.Проблемы с кучей с использованием XStream

Я использую 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). Did final XStream xstream = new XStream(new StaxDriver());

3). Изменены xms и xmx в eclipse.ini до 1024 м. Вот как выглядит мой 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

Пожалуйста посоветуйте ..

+0

Может ли кто-нибудь проконсультироваться? – user3097172

ответ

0

Я также понял этот вопрос, когда я был сериализации объекта Java в Xml. Здесь основная причина: ваш объект java может состоять из переменной экземпляра, которая является общей переменной, такой как однотонный объект и т. Д. Для такой переменной экземпляра вам необходимо инициализировать переменную таким образом, она будет использовать не использовать однотонный объект. Вы можете создать новый объект внутри класса и назначить его переменной экземпляра. Поэтому при сериализации такой переменной экземпляра она не создаст никаких проблем.

Я исправил свою проблему, выполняя то же самое, когда ранее получал такую ​​же ошибку.

Если вам нужна дополнительная помощь, то дайте мне знать.