持续调用javax.xml.ws.Service.getPort()导致PermGen中的OOM

时间:2013-10-01 08:08:14

标签: java web-services jax-ws out-of-memory permgen

改进Java应用程序,我们现在正面临从Axis迁移到Jax-WS。

目前我们遇到以下问题:在我们生成的服务类中,继承自javax.xml.ws.Service,调用Service#getPort

@WebEndpoint(name = "SomeServiceSoap")
public SomeServiceSoap getSomeServiceSoap() {
    return super.getPort(new QName("http://something", "SomeServiceSoap"), SomeServiceSoap.class);
}

每当我们想要对此服务执行方法时调用此方法。但是,在测试中它会导致permgen中的OOM。

我应该避免多次调用它 - 通过为返回的对象创建缓存/池或其他存储吗?或者我错过了这个实现的其他重要功能。

1 个答案:

答案 0 :(得分:1)

虽然我没有发现jax-ws的实现是如何完成这个讨厌的伎俩,但我发现为了避免问题,我需要从版本2.2.6更改jaxws-rt(我们的pom中使用了它)文件,但差不多两年了)到2.2.8

此库版本更改完全解决了该问题。我已经在Java 6和Java 7中对它进行了测试。