[英]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.