Java :当连接对象在未调用 Connection.close() 的情况下被取消时会发生什么



如果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();
}

当垃圾回收器决定是时候收集给定对象时,将调用此方法。

但建议始终手动关闭连接和类似资源,因为垃圾回收器是不可预测的。例如,您可以比垃圾回收器启动和释放资源更快地达到连接限制。

相关内容

最新更新