JAXB对于编组和解组工作正常。因为创建marshallers和unmarshallers可能会很慢,使用它们的池(基于contextPath)似乎是一种合理的方法。但是,看起来Unmarshaller在完成后会保持对象。如果它传递了一个非常大的文档,那么如果该特定的Unmarshaller不会重用一段时间,它可能会保存很多内存。有没有办法让JAXB释放它处理的对象?JAXB坚持传递给Marshaller的对象
JAXBContext jaxBContext = JAXBContext.newInstance(contextPath, loader);
Unmarshaller unMarshaller = jaxBContext.createUnmarshaller();
...
responseObject = unmarshaller.unmarshal(new StreamSource(new StringReader(xml)));
有网上池的实例方法是这样的(例如,一个在阿帕奇:JAXBUtils.java)。当他们把Unmarshaller放回池中时,大多数人似乎没有做任何特别的事情。
更新:这似乎是JAXB中的一个错误:Post-Unmarshall Object Retention。 Marshall中的类似错误早已修复,所以它在最新版本的JAXB中。所以现在我想知道(一),如果有一个解决方法与Unmarshaller的(b)本问题,它的Java6的此修复程序是/将被纳入英寸
是发生在我
你究竟是什么意思的“传递给它的对象”?你认为Marshaller在编组完成后是否持有对编组对象的引用? – 2011-03-03 22:04:06
您使用的是JAXB的哪个实现:Metro(RI),EclipseLink MOXy,Apache JaxMe? – 2011-03-03 22:18:54
问题可能是服务器已返回JAXB已处理的20Mb XML文档情况下的Unmarshaller。后来注意到JVM有很多内存,并且看起来是JAXB池。我相信这是现在与Java 6捆绑在一起的标准JAXB。 – 2011-03-03 22:30:22