代码之家  ›  专栏  ›  技术社区  ›  Venkat Sadasivam

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

  •  5
  • Venkat Sadasivam  · 技术社区  · 15 年前

    我使用JAXB进行XML解析,是否存在性能或内存使用问题?

    6 回复  |  直到 7 年前
        1
  •  6
  •   Dave Ray    15 年前

    要注意的一件事是 JAXBContext.newInstance() 是一个非常缓慢的操作。这就是大量反射和类生成发生的地方,导致了达菲莫提到的永久空间问题。谢天谢地, JAXBContext 线程安全,所以可以 cache one away and reuse it . 否则,我认为可以肯定地说,JAXB的内存使用率将低于完整的DOM,当然,也高于SAX。

    如果你有非常大的文件,可以 process them in chunks with JAXB . 这个 JAXB RI distribution 包括一个使用JAXB的流媒体示例。

        2
  •  2
  •   skaffman    15 年前

    JAXB与基于DOM的解析有着相同的基本问题,一般来说,整个数据结构同时保存在内存中。也就是说,它通常比DOMAPI(XOM可能除外)更不需要内存。

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

        3
  •  2
  •   vtd-xml-author    15 年前

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

        4
  •  1
  •   duffymo    15 年前

    JAXB还有另外一个问题,即使用反射创建类,这些类在运行时添加到Perm空间中。在记忆之外,可能会发生混乱。

        5
  •  0
  •   JasonWyatt    15 年前

    我已经看到,JAXB的性能非常差,与Java中的“简单”XML处理机制不同,例如XECES。 SAXParser .

        6
  •  0
  •   user1550159    7 年前

    添加下面的jvm参数可以解决这个问题(对性能影响很小)

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

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