当前位置: 首页 > 知识库问答 >
问题:

生成xml时的XStream OutOfMemoryError

艾宏远
2023-03-14

我定义了一个类来存储我的应用程序的配置数据。我想将其实例保存到xml并为此使用XStream。但是当我尝试编写实例时,我总是遇到内存错误。

这是我的类定义:

public class Eol_Target_Variable {
    String name;
    String alias;
    long value;
    long default_val;
    int size;
    int scaling;
    int div;
    Boolean read_access;
    Boolean write_access;


    public Eol_Target_Variable(String arg_name, String arg_alias, int arg_value, int arg_size, int arg_scaling,int arg_div)
    {
        name = arg_name;
        alias = arg_alias;
        value = arg_value;
        default_val = 0;
        scaling = arg_scaling;
        div = arg_div;
        size = arg_size;
        read_access = true;
        write_access = true;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }


    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

...等所有标准getter和setter

下面是我将单个对象导出为xml的处理程序

public void importConfiguration() {
    XStream xstream = new XStream(new DomDriver());
    Eol_Target_Variable myvar = new Eol_Target_Variable("jamie", "xtracold", 1977, 16, 1, 1);
    String myxml = xstream.toXML(myvar);
    System.out.print(myxml);
}

每次我抛出“线程中的异常”JavaFX应用程序线程“java.lang.OutOfMemoryError:java堆空间”。我不明白为什么这么简单的类会抛出内存不足错误。我已经成功地使用XStream输出了简单的字符串对象,所以库可以正常工作,似乎正是这个自定义类造成了问题。

我还尝试使用VM参数-Xms512m-Xmx增加在启动时分配的堆1024m但没有区别。

谢谢Jamie

共有1个答案

太叔昊穹
2023-03-14

这是新的类声明

@XStreamAlias("targetVar")
public class Eol_Target_Variable {
    String name;
    String alias;
    long value;
    @XStreamAlias("default")
    long default_val;
    int size;
    int scaling;
    int div;
    @XStreamOmitField
    Node node;
    @XStreamOmitField
    Boolean read_access;
    @XStreamOmitField
    Boolean write_access;


public Eol_Target_Variable(String arg_name, String arg_alias, int arg_value, int arg_size, int arg_scaling,int arg_div,  Node arg_node)
{
    name = arg_name;
    alias = arg_alias;
    value = arg_value;
    default_val = 0;
    scaling = arg_scaling;
    div = arg_div;
    size = arg_size;
    node = arg_node;
    read_access = true;
    write_access = true;
}

我还使用了不同的解析器,因为基本的DOMParser从未处理过大量数据。当我换成StaxDriver时,当XStream遍历整个场景图时,至少可以在调试输出中看到文本流。

XStream xstream = new XStream(new StaxDriver());
xstream.processAnnotations(Eol_Target_Variable.class);

我不会假装完全理解为什么声明内联类会导致问题,但我可以解释为什么要求XStream解析完整的Node可能会导致问题。

如果有人对XStream和复杂的数据结构有任何经验,我欢迎他们的输入。

 类似资料:
  • 问题内容: 我正在创建一个Web API,需要一种很好的方法来非常快速地生成一些格式正确的xml。我找不到在python中执行此操作的任何好方法。 注意:一些库看起来很有前途,但要么缺少文档,要么仅输出到文件。 问题答案: 使用lxml: 输出: 有关更多信息,请参见教程。

  • 问题内容: 我想知道是否有一种方法可以在我拥有数据和标签的情况下自动从XSD架构生成XML文件。我想在python / java中做到这一点。似乎很有可能,但是我找不到任何允许我执行此操作的库。我正在寻找一个相当快速的解决方案。 问题答案: 查看适用于与JAXB相似的Python工具的pyXSD。 XSD用于创建Python类。Python对象用于发出XML。

  • 问题内容: 我想制作一个Java swing应用程序,从中我可以生成保存相同数据的xml文件,并且生成的文件数将由用户决定。我的xml文件包含xml模式,而我的xml文件结构看起来像这样 如果有人提供一些代码片段帮助,我是Java新手,它将对我有更大的帮助。 我想生成保存示例XML中给出的xml模式的xml文件。 问题答案: 在Java中,您使用JAXP处理XML。您使用与DOM相关的类来生成xm

  • 问题内容: 我们正在使用Oracle 11数据库和Java开发环境(使用Eclipse),并且希望将多个xml模式迁移到SQL模式。 已经看过xsd了,但是确实需要一些可以在不安装SQL Server的情况下从ant / Eclipse运行的功能。 问候, 安迪 问题答案: 另一个选择是使用JAXB生成Java对象,并使用Hibernate创建基于类层次结构的架构。 话虽如此,这取决于您要尝试做的

  • 我试图使用Xerces-J动态生成XML schema,但出现了以下错误,希望得到相关帮助。

  • 问题内容: 我使用XJC工具为XSD架构生成Java类。当我使用JAXB Marshaller将类编组为XML有效负载时,我在输出XML中缺少“ schemaLocation”参数,但在xsd文件中声明了此参数。如何在输出XML中强制执行“ schemaLocation”参数? 以下是用于代码生成的xsd模式文件的开头: 问候 问题答案: 试试这个: