我有一个定义用于存储应用程序配置数据的类。我想将此实例保存到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;
}
...等,用于所有标准的吸气剂和吸气剂
这是我的将单个对象导出到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输出了简单的String对象,因此该库正在运行,正是这个自定义类似乎引起了问题。
我还尝试使用VM参数-Xms512m -Xmx1024m增加启动时分配的堆,但这没什么区别。
谢谢 杰米
答案 0 :(得分:0)
这是新的类声明
@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和复杂的数据结构有任何经验,这些经验在JavaFX应用程序中声明,我将欢迎他们的输入。