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