如果java.sql.Connection
作为con
的实例无效,与数据库建立的连接会发生什么情况。
con = null;
连接是关闭还是保持打开状态,直到应用程序运行。
第二个问题:
同样,如果javax.mail.Store
的实例作为store
并将其作废,
store = null;
SMTP 连接是关闭还是保持未关闭状态。谢谢。
Connection
设置为 null,则此连接将保持"打开"状态,并且不会运行与 close 关联的代码。因此,为了关闭它,您必须调用close()
方法。如果连接未关闭,则连接可能持有的其他资源也不会释放
如果您在不调用 close()
的情况下将 connection
实例设为 null,则
connection
将准备好被垃圾收集
并且它不会调用与close()
方法的实现相关的代码
有 finalize 方法,连接或存储的具体实现很可能会覆盖此方法并在那里调用 close()。例如,以下是PostgreSQL JDBC驱动程序的代码片段:
protected void finalize() throws Throwable
{
if (openStackTrace != null)
logger.log(GT.tr("Finalizing a Connection that was never closed:"), openStackTrace);
close();
}
当垃圾回收器决定是时候收集给定对象时,将调用此方法。
但建议始终手动关闭连接和类似资源,因为垃圾回收器是不可预测的。例如,您可以比垃圾回收器启动和释放资源更快地达到连接限制。