Spring 批次中 StAX 项目 reader 和编写器的内存使用情况

Memory usage of StAX item reader and writer in Spring Batch

我正在使用 JAXB 作为 marshaller/unmarshaller 在 Spring 批处理中处理 xml。 StaxEventItemReader 和 StaxEventItemWriter 如何在 reading/writing from/to xml 文件时消耗内存?它是否在将其拆分为块之前将整个 xml 大小存储在内存中,并且在整个步骤中仍然使用相同数量的内存?还是 read/write 基于块大小的文件片段然后在处理下一个块之前释放内存使用量?

StaX 表示“为 XML 流式传输 API”。它即时解析 XML,这意味着它不会将整个 XML 保存在内存中。它在内存方面确实非常有效。

StaxEventItemReaderclass基于拉解析。请参阅 link 以了解其含义的定义。

StaX and Sax 都是基于事件的解析器,逐行解析 XML,因此它不会在内存中存储任何整个 XML 文件。如果你有一个很大的 XML 文件并且你想遍历它,这可能是一个优势。但是,如果您想访问介于两者之间的某些内容,那么它可能没有用,因为它不会在内存中存储任何内容。

您还可以编写自己的自定义上下文来存储 XML 元素及其子元素,同时使用这些库解析 XML 文件以存储 [=17] 的特定块=] 文件,你可以使用它,然后在你移动到 XML.

的下一个事件时清除它

所以基本上它非常有效,因为它不存储整个 XML 文件,而是逐行解析 XML 文件。