我跟着把一个close()
最终块的做法:java.sql.Connection对象在垃圾回收时会自动关闭吗?
void foo() {
Connection conn;
try {
conn = getConnection();
// ..
} final {
try {
conn.close()
} catch(Exception e) {
}
}
}
是否真的需要调用连接上close()
,或将垃圾收集器会自动做呢?
我确定垃圾收集会带来额外的延迟,我只是不希望连接永远保持打开状态。
它是您的责任,当您完成它的关闭连接。垃圾收集器不会为你做。 – Perception 2013-02-12 23:01:16
也许这回答你的问题:http://stackoverflow.com/questions/8652336/jdbc-garbage-collection 总结:你需要关闭连接,以防止各种泄漏,不能依靠GC为你做。 – 2013-02-12 23:01:35
您可能会在连接完成之前耗尽连接。没有结束就不可靠。你可能喜欢尝试执行周围的习语。 (由于你的代码显然是编写的,你似乎会放弃关闭的异常(可能是因为失败获取而导致的NPE) - 您可能想要从那里抛出某种异常,类似于获取连接所抛出的异常。对于Java SE 7,您可以使用新的尝试资源语法来粗略地做正确的事情,但是执行周围仍然胜利。) – 2013-02-12 23:02:13