Jersey客户端连接关闭内存泄漏问题

时间:2011-11-04 16:35:42

标签: memory-leaks connection client jersey resource-leak

我正在使用Jersey v10并编写了以下代码。这是关闭Jersey客户端连接以避免内存泄漏的正确方法。在此之前我没有进行任何调用。

ClientConfig config = setupHttps();
    final Client c = Client.create(config);

    final WebResource r = c.resource(baseUri);
    ClientResponse response = null;
    try {
        response = r.path("/....")
                .header("contentId", id)
                .header("sid", sid).get(ClientResponse.class);
        ...



    } catch (Exception e) {
        log.error("Error returning contentServiceName.");

    } finally {
        if (response != null) {
            response.close();
        }
        if (c!= null) {
            c.destroy();
        }

    }

TIA, 维杰

1 个答案:

答案 0 :(得分:8)

据我所知,是的,这是关闭泽西岛客户端的正确方法 ......并提出以下警告。

1)你想要防止的是内存泄漏,但连接(你要解决的服务器)泄漏...

2)以下内容是关于Client中的Chapter 3 of the Jersey Handbook类:

  

客户端实例是昂贵的资源。建议重新使用已配置的实例来创建Web资源。 Web资源的创建,请求的构建和响应的接收都保证是线程安全的。因此,可以在多个线程之间共享Client实例和WebResource实例

因此,如果您打算进行多次通话,那么为每次通话调用destroy都是一个好主意。 WebResources也是如此(但程度较小)。

3)我所描述的是来自Jersey 1.1(但我看到threads about this as far back as 2009)。