2011-11-04 134 views
4

我正在使用泽西岛v10并编写了下面的代码。这是关闭泽西岛客户端连接以避免内存泄漏的正确方法。在此之前,我终于没有做任何调用。泽西岛客户端连接关闭内存泄漏问题

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, 维杰

回答

8

据我所知,是的,这是关闭一个Jersey客户端 ...有以下注意事项以正确的方式。

1)你正在试图阻止没有内存泄漏,但连接(给你解决服务器)泄漏...

2)Chapter 3 of the Jersey Handbook写入有关Client类以下内容:

客户端实例是昂贵的资源。建议重新使用配置的实例来创建Web资源。 Web资源的创建,请求的建立和响应的接收都是线程安全的。因此,一个客户端实例和WebResource实例可以多线程

之间共享。因此,如果你打算做上多次调用,这是一个好主意呼吁摧毁每一个电话。 WebResources也是如此(但程度较低)。

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