问题 - 解析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