我在基于JBoss的Web应用程序中使用JAXBContext.newInstance操作。据我了解,这个操作非常重量级。我只需要两个Marshaller类的独特实例。如何提高使用JAXBContext.newInstance操作的应用程序的性能?
我最初的建议是有一个静态初始化块将在类加载只有一次初始化这两个实例:
public class MyWebApp {
private static Marshaller requestMarshaller;
private static Marshaller responseMarshaller;
static {
try {
// one time instance creation
requestMarshaller = JAXBContext.newInstance(Request.class).createMarshaller();
responseMarshaller = JAXBContext.newInstance(Response.class).createMarshaller();
} catch (JAXBException e) {
e.printStackTrace();
}
}
private void doSomething() {
requestMarshaller.marshall(...);
responseMarshaller.marshall(...);
...
}
}
如果这是一个合理的解决方案,然后我想我会回答我自己问题,但我想知道这是否是正确的方法来做到这一点?
只是一个评论:你不应该重用marshallers/unmarshallers,它们不是线程安全的。每次都创建它们,速度非常快 – cocorossello 2015-06-03 11:04:15
我认为这里提出的解决方案是专注的,并且非常有帮助,但我不相信代码示例说明了文本中所指出的您不应该调用JAXBContext .newInstance()每次你需要一个Marshaller。不应该doSomething()中的行是'requestMarshaller = jaxbContext.createMarshaller();'? – rscarter 2015-09-23 18:14:57