【问题标题】:How to stop resource leak at HttpClient?如何阻止 HttpClient 的资源泄漏?
【发布时间】:2018-01-22 19:40:00
【问题描述】:

我有一些代码可以使用org.apache.http.client.HttpClient 下载文件。现在我的 IDE 告诉我我有一个 Potential resource leak: 'client' may not be closed。具体代码为:

HttpClient client = HttpClientBuilder.create().build();

HttpResponse response = client.execute(request);

HttpEntity entity = response.getEntity();

我做了一些研究,发现了EntityUtils.consume(entity);,但这并不能解决client 的资源泄漏问题。

所以我的问题是,这真的是资源泄漏吗?如果是,我该如何正确关闭它?

【问题讨论】:

  • 这个问题和你的类似吗? stackoverflow.com/questions/4724193/…
  • 据我所知,不相似
  • 我相信,一旦你完成调用(可能在 finally 块中)关闭 HttpClient 应该可以解决资源泄漏问题。 hc.apache.org/httpcomponents-client-dev/tutorial/html/…。 IDE 是否还提供了对该问题的潜在修复?
  • 那些是Closeable-types,我的是“non-closeable-types”。所以我正在使用 eclipse 并且它不提供直接修复,但它建议将所有调用移动到像 HttpEntity entity = HttpClientBuilder.create().build().execute(request).getEntity(); 这样的 1 行中,现在我不再收到泄漏消息了。不确定它是否被认为是一个适当的修复(也不确定我是否应该将其作为答案发布或只是删除问题)
  • 我认为您可以将其发布为答案,以便至少遇到此问题的人得到修复。谢谢!

标签: java memory-leaks apache-httpclient-4.x


【解决方案1】:

由于我找不到任何其他方法并且 Eclipse IDE 没有任何其他可用的快速修复,我尝试了唯一建议的“修复”,即将所有 3 行合并为 1 行,如下所示:

HttpEntity entity = HttpClientBuilder.create().build().execute(request).getEntit‌​y();

我不确定这是否真的解决了资源泄漏问题,但至少 Eclipse 似乎认为

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 2019-07-17
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2018-03-11
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多