Java JAXBContextImpl导致巨大的保留堆

Java JAXBContextImpl导致巨大的保留堆,java,xml,spring,jaxb,cxf,Java,Xml,Spring,Jaxb,Cxf,我们的代码正在创建com.sun.xml.bind.v2.runtime.JAXBContextImpl的多个实例,这导致了巨大的保留堆。这反过来会阻塞服务器。我们将jaxb2.2.1与CXF和Spring一起使用,并处理非常复杂的hrxml模式。 还有其他人面对过吗?这不是内存泄漏,只是32实例占用603MB。只是一个旁注:JAXBContext是线程安全的,您可以(也可能是)只创建一次(对于模式)并永远重用它。另外,您可以尝试通过JAXBContext.newInstance(“packag

我们的代码正在创建
com.sun.xml.bind.v2.runtime.JAXBContextImpl
的多个实例,这导致了巨大的保留堆。这反过来会阻塞服务器。我们将
jaxb2.2.1
CXF
Spring
一起使用,并处理非常复杂的
hrxml
模式。
还有其他人面对过吗?这不是内存泄漏,只是
32
实例占用
603
MB。

只是一个旁注:JAXBContext是线程安全的,您可以(也可能是)只创建一次(对于模式)并永远重用它。另外,您可以尝试通过
JAXBContext.newInstance(“package1:package2”)
将所有包加载到一个上下文中,看看整体情况是否更好。我不是显式调用newInstance()。我从xsd生成jaxb类,浅层大小(对于4个对象)是352,但保留的大小是104009896。我假设从xsd生成jaxb不是JVM堆的一部分。为什么不在构建过程中生成它呢?澄清一下,使用JAXB的“正常”方式是在构建时使用xjc从xsd文件创建Java类。然后,在运行时从生成的代码包中创建一个JAXBContext。对于每个文档,从上下文创建一个新的(un)封送拆收器并转换文档。你在做与这不同的事情吗?如果是这样,您可能应该将详细信息与相关代码一起编辑到您的问题中。