连接关闭

时间:2018-06-15 07:14:31

标签: java jdbc connection

使用方法getConnection()初始化连接。我知道,我可以使用

Target t = new Target(getConnection());
在Java 7中

使用该连接并在try尝试结束时自动关闭它。但是如果我不使用下面的代码就会发生什么:

{{1}}

这是否会造成资源泄漏,因为我无法关闭连接,因为我没有为连接提供变量?

2 个答案:

答案 0 :(得分:2)

如果您使用不使用try-with-resources的代码(或使用显式关闭的旧式try-finally),那么 - 显然 - 连接不会被显示的代码关闭。因此,除非Target以某种方式关闭连接,否则在这种情况下您将遇到资源泄漏。

请注意,即使使用try-with-resources,即使连接关闭,您仍可能会发生内存泄漏。如果连接保存在Target的实例字段中,并且目标的生命周期比try-with-resources块长,则会发生这种情况,因为在这种情况下,连接(以及连接所持有的任何其他对象)不能垃圾收集器回收,直到目标本身有资格进行垃圾收集。

作为资源管理的一般经验法则,创建资源的人也负责关闭该资源(除非另有明确说明),所以除非你有充分的理由不这样做,否则你应该使用try-with-这里的资源。

答案 1 :(得分:0)

是的,你是对的,它会造成资源泄漏。 java中的Connection接口扩展了AutoCloseable接口,该接口显示“当不再需要时必须关闭的资源”。因此,在完成代码后必须显式关闭连接(或者使用免费的资源尝试)。

请注意您在传递资源块的尝试中的情况 目标t =新目标(conn);内存泄漏的细微变化不是连接泄漏。