2011-09-07 61 views
2

我有負責解析XML事件並將它們推送到我們的RabbitMQ總線的web應用程序的內存問題。這個web應用程序在一個servlet中接收XML事件,我們將它解碼並推送到我們的總線,然後我們確認發件人。我們正在使用java 5中的org.xml.sax.helpers.DefaultHandler,但看起來Stax(帶有XMLStreamReader)好得多,仍然很容易閱讀,但我們需要將我們的代碼遷移到java6(請參閱SO上的this question)。它值得嗎?在java中解析XML的內存效率最高的方法是什麼?

在Java中解析XML的內存效率最高的方法是什麼?我們正在尋找一個快速,高效的內存和易於編寫/讀取代碼。這是否存在?

+4

我無法相信一個SAX解析器造成內存問題。由於它的性質,SAX是基於流的,因此內存開銷非常低。你在做什麼像緩存整個文檔在內存中? –

+0

我們沒有在內存中緩存文檔,我們正在閱讀流。代碼很好,但現在我們收到了更多的事件,並且我們收到了更多... –

回答

3

事件驅動的解析器不會構建AST,因此速度和內存效率都很高。 XML的標準將由SAX standard定義。

The Xerces implementation claims to be fast.

+2

當使用最新的Xerces(2.11.0)與Java 1.6中包含的標準JAXP解析器時,我發現性能顯着提高。只花了一半時間來解析一個大的XML文件。 –

+1

我想我會評論,以防萬一任何人有同樣的問題 - 我相信AST是抽象語法樹 – ThisClark

1

NanoXML是支持SAX解析非常小,重量輕的XML解析器。這是Xerces的一個很好的選擇。

+0

它是內存效率? –

+1

在進一步調查中,不,NanoXML不具有內存效率。 – mcfinnigan

+0

好的,謝謝,它總是很酷,不時發現新的庫。 –

相關問題