我需要生成一个大的 xml。我目前正在使用 JAXB 2.0 。
问题是如果我将所有对象都保存在内存中并生成堆空间不足的概率非常高。
我想知道如何做到这一点的最佳方法。
谢谢
您可以使用 StAX 来编组 XML 的外部主体,然后使用 JAXB 来编组重复的对象,而不必将它们全部放在内存中。
看到这个线程: http: //glassfish.10926.n7.nabble.com/Marshalling-Large-data-into-xml-td55636.html
我建议你以下。
如何创建 XML?我猜你首先创建你的对象图,即创建所有对象和它们之间的依赖关系。然后你调用这样的东西:
JAXBContext.newInstance("YOUR PACKAGES LIST").marshal(rootObject, out);
JAXB 将您的对象作为 bean 访问,即使用 getter。因此,您实际上不必在编组之前创建完整的对象图。您只需提供 getter 的按需实现,以便他们能够根据请求获取对象。我相信它会帮助你减少内存消耗。
如果您不想在类中实现这种按需机制,您可以使用 AspectJ 或其他面向方面的库(或直接字节码修改库,如 cglib 或 javassist)将按需检索代码注入模型对象。