我有一个使用CXF来调用Web服务的Java应用程序。启动器的代码看起来像 使用JaxWsProxyFactoryBean在Java和Spring中发生内存泄漏
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.tempuri.IAPIService;
import javax.inject.Inject;
/**
* Created by flavius on 23/09/14.
*/
@Component()
public class VsJaxWsProxyFactory {
@Inject
private Environment env;
private JaxWsProxyFactoryBean factoryBean = null;
public Object create() {
if (factoryBean == null) {
factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(IAPIService.class);
factoryBean.setAddress(env.getProperty("api.wsdl"));
}
return factoryBean.create();
}
}
应用程序运行正常,但在包装盒开始后,消耗了太多的内存和应用程序开始运行缓慢。当我们试图做一个内存分析,我们发现以下
看来,CXF以某种方式建立在每次调用一个新的服务配置对象,并没有被释放。我在org.apache.cxf.jaxws.support.JaxWsServiceConfiguration类中找不到很多信息,不确定这是一个配置问题还是某个库中的某个内部错误。