Java 使用jaxb生成大型xml

Java 使用jaxb生成大型xml,java,xml,jaxb2,Java,Xml,Jaxb2,我需要生成一个大的xml。我目前正在使用JAXB2.0 问题是,如果我将所有对象都保留在内存中,并生成堆空间耗尽的概率非常高 我想知道如何做到这一点的最佳方法 谢谢我建议你做以下几点 如何创建XML?我想您首先要创建对象图,即创建所有对象以及它们之间的依赖关系。然后你称之为这样的东西: JAXBContext.newInstance(“您的包列表”).marshal(rootObject,out) JAXB以bean的形式访问对象,即使用getter。因此,在编组之前,实际上不必创建完整的对象图

我需要生成一个大的xml。我目前正在使用JAXB2.0

问题是,如果我将所有对象都保留在内存中,并生成堆空间耗尽的概率非常高

我想知道如何做到这一点的最佳方法


谢谢

我建议你做以下几点

如何创建XML?我想您首先要创建对象图,即创建所有对象以及它们之间的依赖关系。然后你称之为这样的东西:

JAXBContext.newInstance(“您的包列表”).marshal(rootObject,out)

JAXB以bean的形式访问对象,即使用getter。因此,在编组之前,实际上不必创建完整的对象图。您只需要提供getter的按需实现,这样他们就能够根据请求获取对象。我相信它会帮助你减少内存消耗


如果不想在类中实现这种按需机制,可以使用AspectJ或其他面向方面的库(或直接使用字节码修改库,如cglib或javassist)将按需检索代码注入到模型对象中。

可以使用StAX封送XML的外部主体,然后使用JAXB封送重复的对象,而不必将它们全部存储在内存中


查看此线程:

是。。。。我创建所有对象,然后将其发送给编组。但是,我改变了设计,使重复对象(XML中的节点,即员工数据)成批完成(创建对象并填充数据),这样就没有堆空间问题。我们如何进行按需实现?根据您的问题,我猜您的源数据不在JAXB对象中(数据库、远程服务?)这是正确的吗?如果是这样,那么我建议您不要使用JAXB来封送XML。相反,直接从源数据写入XML,并保存所有这些对象的内存负担,以便在以后将它们编成XML。@帕特利斯:输入来自JSON字符串。我需要构建这些对象,运行一些。它们上面的规则(流口水)。最后我需要将它们打包成XML。所以我不能直接从源代码运行它们。死链接:(你能在其他地方找到它吗?