2

ガベージコレクターに関する質問。データベース接続を作成し、データベースに対していくつかの操作を実行した後、接続オブジェクトを長期間使用しなかった場合、ガベージコレクターによって接続が解放される可能性があります。この接続を後で使用したい。

編集:確認のために、接続を作成した場合、Webアプリケーションのコンテキストレベルにある場合はどうなりますか?

4

5 に答える 5

9

オブジェクトへの強力な参照を保持しているConnection場合、ガベージコレクターがオブジェクトに触れることはなく、データベース接続は維持されます。複数のスレッドで使用できないことを覚えておいてください。

一方、接続を開いたままにしておく時間が長すぎると、一部の基盤となるリソース(TCP / IPソケットなど)が中断される可能性があります。

接続への最後の参照を失うと(それを上書きするか、に設定することによりnull)、ガベージコレクターは接続に関連付けられているすべてのJavaオブジェクトと接続自体を解放しますただし、基になるデータベース接続は解放されないため、常に明示的に呼び出す必要があります。

connection.close();
于 2012-04-26T07:23:58.247 に答える
1

一言で言えば、JVMガベージコレクション:あなたまたは他の誰かがオブジェクトへの参照を持っている場合、JVMはそれをガベージコレクションすることを許可されていません。それへの参照がない場合、JVMは必要になるまでガベージコレクションを行う必要はありませ

于 2012-04-26T07:23:42.647 に答える
0

接続への参照を保持している限り、接続はガベージコレクションされません。したがって、理論的には、好きなだけ使い続けることができます。

于 2012-04-26T07:23:15.110 に答える
0

接続オブジェクトを参照しなくなった場合、それはガベージコレクションのメンバーですが、gcによってガベージコレクションされることを保証することはできません。それは完全にgcに依存します。

将来使用する場合は、グローバルオブジェクトにすることをお勧めします。アプリケーションが参照を保持し、ガベージコレクションのメンバーにならないようにします。

于 2012-04-26T07:23:20.760 に答える
0

接続の参照の種類によって異なります。強い参照がある場合はガベージコレクションされませんが、弱い参照がある場合はGCの対象になります。

静的レベルまたはインスタンスレベルで保持されている場合、ガベージコレクションは行われません。

ただし、データベース接続を長時間保持するのではなく(すべてのデータベースに接続数に制限があることを考慮すると)、必要に応じて解放して再取得する必要があります。

接続管理を改善するために、ConnectionPoolの使用も検討する必要があります。

于 2012-04-26T07:23:47.450 に答える