什么时候需要close()释放资源
在 Java 里,“要不要 close”只看一件事:它是不是实现了 java.io.Closeable
(或 AutoCloseable
)并且持有了操作系统级的“昂贵”资源(文件描述符、socket、native 句柄等)。
对象 | 是否实现了 Closeable | 内部是否持有需要释放的系统资源 | 要不要手动 close |
---|---|---|---|
CloseableHttpClient | ✅ 是 | 内部有连接池、线程、socket | 必须 close |
CloseableHttpResponse | ✅ 是 | 底层有 socket 流 | 必须 close |
HttpPost | ❌ 否 | 只是 Java 层面的 POJO,封装了 URL、header、entity 等数据,没有系统句柄 | 不用 |
JSONObject (org.json 或 fastjson ) | ❌ 否 | 纯内存对象 | 不用 |
StringEntity | ❌ 否 | 仅仅是对 byte[] 的包装,没有打开流 | 不用 |
因此代码里只关闭了 response
和 httpClient
就够了;其余对象随着方法结束就会被 GC 回收,不会泄漏文件描述符或 socket。