2016-05-12 54 views
0

我們有一個現有的系統,其中有一個HTTP XML API,用戶可以查詢系統中包含的對象。對象按分層方式分類,如文件夾。該系統可能包含非常大量的對象。該API使用對象的屬性構建XML模型(不是直接對象到XML映射),並通過HTTP API返回。如果用戶查詢系統的根目錄,它將返回系統中每個對象的屬性,並將這個xml對象保存在內存中會頻繁導致JVM Out of Memory問題。在內存中管理非常大的xml

目前系統正在維護基於jdom的DOM類型xml模型。需求是通過逐個迭代系統對象來構造對象模型(效率低下,但這是一個遺留系統)並返回完整的xml模型。有沒有這樣做的內存有效的方式。

據我所知,SAX解析器主要用於讀取xml對象,而不是用於頻繁更新。

任何建議,將不勝感激

+0

您目前使用的是哪種XML編寫器?是否可以使用類似於'XMLStreamWriter'的東西並直接寫入輸出流而不是將XML存儲在內存中? – Max

+0

「非常大」是沒有意義的。工程師使用數字。 –

+0

@MichaelKay我們已經遇到了幾百萬個對象的部署,最新的崩潰堆轉儲說它崩潰時創建了200萬個xml對象。 –

回答

1

在內存中創建模型首先是低效的,特別是如果你再在內存中創建XML了。然後你在內存中有兩次數據,這是很多的浪費。

您可以使用XMLStreamWriter避免在內存中創建完整的XML,而是直接將其直接流出。這應該至少可以讓你擺脫DOM模型,它可能比數據模型使用更多的內存。