在java中解析XML的内存效率最高的方法是什么?
我有负责解析XML事件并将它们推送到我们的RabbitMQ总线的web应用程序的内存问题。这个web应用程序在一个servlet中接收XML事件,我们将它解码并推送到我们的总线,然后我们确认发件人。我们正在使用java 5中的org.xml.sax.helpers.DefaultHandler
,但看起来Stax(带有XMLStreamReader)好得多,仍然很容易阅读,但我们需要将我们的代码迁移到java6(请参阅SO上的this question)。它值得吗?在java中解析XML的内存效率最高的方法是什么?
在Java中解析XML的内存效率最高的方法是什么?我们正在寻找一个快速,高效的内存和易于编写/读取代码。这是否存在?
事件驱动的解析器不会构建AST,因此速度和内存效率都很高。 XML的标准将由SAX standard定义。
当使用最新的Xerces(2.11.0)与Java 1.6中包含的标准JAXP解析器时,我发现性能显着提高。只花了一半时间来解析一个大的XML文件。 –
我想我会评论,以防万一任何人有同样的问题 - 我相信AST是抽象语法树 – ThisClark
小心提及萨克斯的答案,因为它的代价是性能显着降低。没有牺牲可用性的最高内存效率的sax解析是vtd-xml。这里是证明
处理XML和Java - 性能基准http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
我无法相信一个SAX解析器造成内存问题。由于它的性质,SAX是基于流的,因此内存开销非常低。你在做什么像缓存整个文档在内存中? –
我们没有在内存中缓存文档,我们正在阅读流。代码很好,但现在我们收到了更多的事件,并且我们收到了更多... –