JAXB性能优化体会

最近在作项目的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实例对象是线程安全的,能够放心共享使用。性能

相关文章
相关标签/搜索