gpt4 book ai didi

java - 连接关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:10 24 4
gpt4 key购买 nike

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

try (Connection conn = getConnection()) {
...
Target t = new Target(conn);
...
}

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

Target t = new Target(getConnection());

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

最佳答案

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

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

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

关于java - 连接关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50870763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com