我们有一个现有的系统,其中有一个HTTP XML api,用户可以在其中查询系统中包含的对象。对象按层次结构方式分类,如文件夹。系统可能包含大量对象。 API使用对象的属性构建XML模型(不是XML映射的直接对象),并通过HTTP API返回。如果用户查询系统的根目录,它将返回系统中每个对象的属性,并在内存中维护此xml对象会导致JVM内存不足问题。
目前,该系统正在维护基于jdom的DOM类型xml模型。要求是通过逐个迭代系统对象来构造对象模型(效率低但这是遗留系统)并返回完整的xml模型。是否有任何记忆效率的方法。
据我所知,SAX解析器主要用于读取xml对象,而不是用于频繁更新。
任何建议都将不胜感激
答案 0 :(得分:1)
首先在内存中创建模型效率很低,特别是如果您在内存中创建XML也是如此。然后你在内存中有两次数据,这很浪费。
您可以使用XMLStreamWriter来避免在内存中创建完整的XML,而是直接将其直接流式传输。这至少应该允许你摆脱DOM模型,这可能比数据模型使用更多的内存。