我们有一个现有的系统,其中有一个HTTP XML api,用户可以在其中查询系统中包含的对象。对象以分层方式(如文件夹)进行分类。系统可能包含大量对象。 API使用对象的属性构建XML模型(不是直接将对象映射到XML映射),并通过HTTP API返回该模型。如果用户查询系统的根目录,它将返回系统中每个对象的属性,并且将此xml对象保留在内存中会导致JVM内存不足问题。

当前,系统正在维护基于jdom的DOM类型xml模型。要求是通过一个接一个地迭代系统对象来构建对象模型(效率低下,但这是一个遗留系统),然后返回完整的xml模型。是否有任何有效的内存方式做到这一点。

据我了解,SAX解析器主要用于读取xml对象,而不用于频繁更新。

任何建议将不胜感激

最佳答案

首先在内存中创建模型效率低下,尤其是如果您随后还要在内存中创建XML的话。然后,您将数据两次存储在内存中,这很浪费。

您可以使用XMLStreamWriter避免在内存中创建完整的XML,而是直接将其流式传输出去。这至少应该使您摆脱DOM模型,该模型可能比数据模型使用更多的内存。

10-05 21:13
查看更多