最近在作項目的JAXB性能優化,原來Unmarshal平均每條須要1秒以上。通過優化後,平均每條少於2毫秒。緩存
1. 若是使用newInstance(String contextPath)來建立JAXBContext,每次建立時間很是耗時,第一次在2秒以上,後續建立相同參數的JAXBContext須要1秒以上。若是使用這種方式建立JAXBContext,建議經過contextPath來緩存JAXBContext對象。安全
2. 若是使用newInstance(Class... classesToBeBound)來建立JAXBContext,則建立時間相比上面的要短,第一次250毫秒左右,後續建立相同參數的JAXBContext很是快。不過使用這種方式建立的JAXBContext須要注意一點,你必須很是清楚你要Unmarshal的頂級Class(就是最後的結果Class), 這個Class直接或間接引用的Class在Unmarshal時都不會有問題,若是有未引用到的Class,則會拋出異常。性能優化
3. 在Unmarshal時,上述第2種方式建立的JAXBContext要比第1種方式建立的性能好。若是你很是清楚你Unmarshal最後的結果Class,那麼能夠使用第2種方式建立,不然請使用第1種方式建立JAXBContext。多線程
4. Marshaller實例對象和Unmarshaller實例對象都是非線程安全的,建立很是快,不要在多線程環境下共享這2個實例對象。JAXBContext實例對象是線程安全的,能夠放心共享使用。性能