我们有一个现有的系统,其中有一个 HTTP XML api,用户可以在其中查询系统中包含的对象。对象像文件夹一样以分层方式分类。系统可能包含大量对象。 API 使用对象的属性构建 XML 模型(不是直接对象到 XML 映射),并通过 HTTP API 返回该模型。如果用户查询系统的根目录,它将返回系统中每个对象的属性,并且在内存中维护此 xml 对象会经常导致 JVM 内存不足问题。
目前系统正在维护基于jdom的DOM类型xml模型。需求是通过逐个迭代系统对象来构建对象模型(效率低下,但这是一个遗留系统)并返回完整的 xml 模型。有没有任何内存有效的方法来做到这一点。
据我了解,SAX解析器主要用于读取xml对象,而不是用于频繁更新。
如有任何建议,我们将不胜感激
最佳答案
首先在内存中创建模型效率很低,特别是如果您随后也在内存中创建 XML。那么你的数据会在内存中出现两次,这会造成很大的浪费。
您可以使用XMLStreamWriter为了避免在内存中创建完整的 XML,请直接将其流式传输。这至少应该允许您摆脱 DOM 模型,因为它可能比数据模型使用更多的内存。
关于java - 管理内存中非常大的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182685/