【问题标题】:Are there any memory utlization issue with JAXB?JAXB 是否存在内存使用问题?
【发布时间】:2009-11-16 22:22:16
【问题描述】:

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

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        【解决方案5】:

        我已经看到,与 Java 中更“简单”的 XML 处理机制(例如 Xerces SAXParser)相比,JAXB 的性能会受到相当严重的影响。

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-13
            • 2016-01-23
            • 2015-02-23
            • 1970-01-01
            • 2020-11-01
            • 2011-09-03
            • 1970-01-01
            • 2011-01-16
            相关资源
            最近更新 更多