java - 管理内存中非常大的 xml

标签 java xml parsing memory-management

我们有一个现有的系统,其中有一个 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/

相关文章:

iphone - 使用 NSXMLParser 解析 XML

javascript - 使用 JQuery $.getJSON 解析外部 JSON?

java - 如何从 java 中的字符串中删除无效的 unicode 字符

java - Maven:迭代 Maven 资源目录中的文件目录

java - 如何使用比较器对重复的字符串进行排序?

java - 使用java应用程序可执行文件打开并读取随机.txt,不知道.txt的路径

android - 如何通过 Android 将 png 文件转换为 xml 资源?

php - 一些关于 RSS 提要的帮助

html - 使用经典 ASP 将 HTML 保存为 XML

java - WebView 不显示任何内容