2011-11-04 136 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)。