問題 - 解析XML字符串時,內存利用率在我的程序中不斷增長。將字符串XML解析爲Java對象時的OutOfMemory
我有一個XML流中活過來一個TCP端口上。
我使用Netty拉出xml數據,然後使用XStream將XML字符串反序列化/解組爲Java對象樹。
當我使用NetBeans輪廓監視內存的消耗,我看到越來越多的HEAP隨着時間的推移,最後JVM拋出內存溢出異常。 我追蹤了調用堆棧,並附上了我的一個測試實例的截圖。
內存消耗似乎發生時,我反序列化/解組XML字符串轉換成Java對象。
我已經試過內的XStream不同的解析器做解析 - XPP3,KXML,STAX。我甚至嘗試過使用JAXB而不是XStream來解組。 無論使用何種解析器,問題都會持續存在。
我已經嘗試了所有這些不同的解析器,但迄今爲止我有同樣的問題。
xstream1 = new XStream(new KXml2Driver());
xstream2 = new XStream(new StaxDriver());
xstream3 = new XStream(new JDomDriver());
xstream4 = new XStream(new Xpp3Driver());
就像我剛纔提到的,我甚至嘗試過使用JAXB解組而不是XStream ...仍然是同樣的問題。
如果你看看附加的圖像,它的這個Arrays.copyOfRange調用在char []下面,顯示出來...... 不管它是哪個解析器,這個調用總是出現在trace的頂部。
我完全失去了關於如何解決或處理這個問題
PLS注 - 我不是從文件中讀取XML。我得到一個包含小XML塊的實時數據流。我提取各塊將其轉換成Java對象進行進一步的處理
感謝 一個
A)沒有上限B)我不保留任何有意...除非有錯誤。 C)這就是我想知道的,事情只是指出了我提到的這個解析區域,內存似乎正在發生。 – FatherFigure 2012-07-08 06:50:16
如果您沒有保留任何數據,那麼很難在XML解析或其他任何內容中看到您如何泄漏內存。但無論如何,有方法可以追蹤存儲泄漏。例如:http://www.oracle.com/technetwork/java/javase/memleaks-137499.html#gbywf – 2012-07-08 06:57:35
我的應用程序確實有內存泄漏 - 修復後可以正常工作。 – FatherFigure 2012-07-13 02:16:29