簡體   English   中英

Java中的內存高效XML操作

[英]Memory-efficient XML manipulation in Java

我們正在實現一個具有兩個后端組件的事務系統:

  • 組件A生成初始XML響應
  • 組件B修改初始響應XML

生成的XML將發送回請求者。 由於我們可能在高負載下執行此操作,因此我希望以非常高效的CPU /內存方式執行此操作。

在保持對整體內存利用率的嚴格限制的同時執行上述操作的最佳方法是什么?

具體來說,最好是對組件A的輸出進行DOM解析並將其傳遞給組件B以在內存中進行修改? 有沒有更好的方法來使用SAX來實現這一點,這可能更節省內存? 是否有通過SAX或DOM執行此操作的標准庫?

感謝您的任何見解。

-Raj

通常,SAX比DOM更具內存效率,因為整個文檔不需要加載到內存中進行處理。 但是,答案取決於“組件B修改初始響應XML”要求的細節。

  • 如果每個更改都是其自己的XML子樹的本地更改(即,您可能需要來自通向樹根但不是兄弟節點的所有節點的數據),SAX將更好地工作。
  • 如果更改需要引用兄弟節點來生成結果,那么DOM將更好地工作,因為它可以讓您避免構建自己的數據結構來存儲兄弟節點。

組件B上的一個方面或過濾器將XSL-T轉換應用於初始XML響應可能是一種完成它的干凈方法。 內存利用率取決於請求的大小和內存中的實例數。 CPU也將依賴於這兩個因素。

DOM要求在修改之前將整個XML文檔駐留在內存中。 如果它只是一些必須改變的元素,那么SAX是一個很好的選擇。

SAX是一個基於事件的解析實用程序。 您將收到有關諸如beginDocument(),startElement(),endElement()等事件的通知。您可以在內存中保存要保存的內容。 您只能控制所需的事件,這可以真正提高解析速度並減少內存使用。 可以節省內存,具體取決於您在內存中保存的內容和內容。 對於一般情況,SAX比DOM更具內存效率。 DOM會將整個文檔保存在內存中以便進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM