2

java.sql.Connectionasのインスタンスconが無効化された場合、データベースで確立された接続はどうなりますか。

con = null;

接続が閉じているか、アプリケーションが実行されるまで開いたままですか。

2番目の質問:
同様に、javax.mail.Storeasのインスタンスがあり、storeそれを無効にすると、

store = null;

SMTP接続が閉じられるか、閉じられないままになりますか。ありがとう。

4

3 に答える 3

3

nullに設定するConnectionと、この接続は「開いた」ままになり、閉じるに関連付けられたコードは実行されません。したがって、それを閉じるには、close()メソッドを呼び出す必要があります。接続が閉じられていない場合、接続によって保持されている可能性のある他のリソースも解放されません

于 2012-07-04T07:26:22.753 に答える
2

そのときをconnection呼び出さずにインスタンスをnullにするとclose()

connection ガベージコレクションの準備ができている

close()また、メソッドの実装に必要なコードは呼び出されません

于 2012-07-04T07:23:07.923 に答える
1

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

このメソッドは、ガベージコレクターが特定のオブジェクトを収集する時期であると判断したときに呼び出されます。

ただし、ガベージコレクターは予測できないため、接続や同様のリソースを常に手動で閉じることをお勧めします。たとえば、ガベージコレクタが起動してリソースを解放するよりも早く、接続制限に達する可能性があります。

于 2012-07-04T07:35:02.977 に答える