JAXB是否存在内存使用问题?

时间:2009-11-16 22:22:16

标签: java xml jaxb

我正在使用JAXB进行xml解析,是否有任何性能或内存利用问题?

6 个答案:

答案 0 :(得分:6)

有一点需要注意的是JAXBContext.newInstance()是一个非常慢的操作。这是很多反射和类生成的地方,导致duffymo提到的烫发空间问题。值得庆幸的是,JAXBContext是线程安全的,所以cache one away and reuse it没问题。否则,我认为可以肯定地说,JAXB内存使用量将比完整DOM更低(或者更少),当然,还要大于SAX。

如果您有非常大的文档,则可以process them in chunks with JAXBJAXB RI distribution包含使用JAXB进行流式传输的示例。

答案 1 :(得分:2)

JAXB遇到与基于DOM的解析相同的基本问题,一般来说,整个数据数据结构同时保存在内存中。也就是说,它通常比DOM API更少内存(可能除了XOM)。

话虽如此,如果需要,还有一些方法可以使用JAXB以面向流的方式读取大型文档的片段。不过,这是相当奇特的用法。

答案 2 :(得分:2)

由于过多的对象创建/破坏,您可能确实遇到了Java XML数据绑定的性能和内存问题,this article可能会有所帮助 解释一种可能有助于避免这些问题的新数据绑定技术

答案 3 :(得分:1)

JAXB还有一个问题,就是使用反射来创建在运行时添加到perm空间的类。可能会出现OutOfMemoryError混乱。

答案 4 :(得分:0)

我已经看到使用JAXB可以严重打击性能,而不是使用Java中的更简单的XML处理机制,例如Xerces SAXParser

答案 5 :(得分:0)

添加以下JVM参数可以解决此问题(对性能有轻微影响)

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true

https://issues.apache.org/jira/browse/CXF-2939