簡體   English   中英

Java:如果不調用Connection.close()而使Connection對象無效時,會發生什么情況

[英]Java : What happens when Connection object is nullified without calling Connection.close()

如果con 。的java.sql.Connection實例無效,與數據庫建立的連接會發生什么情況。

con = null;

是關閉連接還是保持打開狀態,直到應用程序運行。

第二個問題:
同樣,如果將javax.mail.Store的實例作為store並將其無效,

store = null;

smtp連接將關閉還是保持關閉狀態。 謝謝。

如果您設置Connection為null,該連接將保持“開放”,並與密切相關的代碼將無法運行。 因此,要關閉它,必須調用close()方法。 如果未關閉連接,則連接可能保留的其他資源也不會釋放

如果您將connection實例設為空而不調用close()

connection將准備好被垃圾收集

並且不會調用與close()方法的實現有關的代碼

有finalize方法,Connection或Store的具體實現很可能會覆蓋此方法並在那里調用close()。 例如,以下是PostgreSQL JDBC Driver的片段:

protected void finalize() throws Throwable
{
    if (openStackTrace != null)
        logger.log(GT.tr("Finalizing a Connection that was never closed:"), openStackTrace);

    close();
}

當垃圾收集器決定是時候收集給定對象時,將調用此方法。

但是建議始終手動關閉連接和類似資源,因為垃圾收集器是不可預測的。 例如,您可以達到連接限制的速度快於垃圾收集器啟動和釋放資源的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM