我有一個使用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類中找不到很多信息,不確定這是一個配置問題還是某個庫中的某個內部錯誤。