私は最近 (jmap+jhat を介して) アプリが多くのインスタンス クラスを格納してリークしていることに気付きまし
た。すべての PreparedStatements を閉じていることを確認するためにコードを再確認し、不足しているものをいくつか見つけましたが、結果は変わりませんでした。
- 一部の PreparedStatement は作成され、すぐに閉じられます
- その他のいくつかは起動時に作成され、何度も再利用されます
-接続プールとして使用していますこの種の動作の原因は何ですか?com.mysql.jdbc.Field
org.apache.tomcat.jdbc.pool.DataSource
質問する
479 次
1 に答える
1
以下を使用して、すべての準備済みステートメント/結果セットを閉じていますか?
PreparedStatement stmt (possible assignment here);
try
{
// do all work with prepared statement
ResultSet rs;
try
{
while (rs.next()) ...
// process results
}
finally
{
rs.close();
}
}
finally
{
stmt.close();
}
終了時にすべての結果セットが (例外に関係なく) 閉じられ、すべてのステートメントが (例外に関係なく) 閉じられることを保証するには? もちろん、他の書き方もありますが、考え方は同じです。
これらすべてを適切に行っている場合、参照が多すぎて大量のメモリを占有している場合を除き、ほぼ確実に問題なく、何もする必要はありません。
于 2013-05-09T13:03:39.957 に答える