java.sql.Connection
asのインスタンスcon
が無効化された場合、データベースで確立された接続はどうなりますか。
con = null;
接続が閉じているか、アプリケーションが実行されるまで開いたままですか。
2番目の質問:
同様に、javax.mail.Store
asのインスタンスがあり、store
それを無効にすると、
store = null;
SMTP接続が閉じられるか、閉じられないままになりますか。ありがとう。
java.sql.Connection
asのインスタンスcon
が無効化された場合、データベースで確立された接続はどうなりますか。
con = null;
接続が閉じているか、アプリケーションが実行されるまで開いたままですか。
2番目の質問:
同様に、javax.mail.Store
asのインスタンスがあり、store
それを無効にすると、
store = null;
SMTP接続が閉じられるか、閉じられないままになりますか。ありがとう。
nullに設定するConnection
と、この接続は「開いた」ままになり、閉じるに関連付けられたコードは実行されません。したがって、それを閉じるには、close()
メソッドを呼び出す必要があります。接続が閉じられていない場合、接続によって保持されている可能性のある他のリソースも解放されません
そのときをconnection
呼び出さずにインスタンスをnullにするとclose()
、
connection
ガベージコレクションの準備ができている
close()
また、メソッドの実装に必要なコードは呼び出されません
finalizeメソッドがあり、ConnectionまたはStoreの具体的な実装がこのメソッドをオーバーライドし、そこでclose()を呼び出す可能性が非常に高くなります。たとえば、PostgreSQLJDBCDriverのスニペットは次のとおりです。
protected void finalize() throws Throwable
{
if (openStackTrace != null)
logger.log(GT.tr("Finalizing a Connection that was never closed:"), openStackTrace);
close();
}
このメソッドは、ガベージコレクターが特定のオブジェクトを収集する時期であると判断したときに呼び出されます。
ただし、ガベージコレクターは予測できないため、接続や同様のリソースを常に手動で閉じることをお勧めします。たとえば、ガベージコレクタが起動してリソースを解放するよりも早く、接続制限に達する可能性があります。