0

私は最近 (jmap+jhat を介して) アプリが多くのインスタンス クラスを格納してリークしていることに気付きまし た。すべての PreparedStatements を閉じていることを確認するためにコードを再確認し、不足しているものをいくつか見つけましたが、結果は変わりませんでした。 - 一部の PreparedStatement は作成され、すぐに閉じられます - その他のいくつかは起動時に作成され、何度も再利用されます -接続プールとして使用していますこの種の動作の原因は何ですか?com.mysql.jdbc.Field



org.apache.tomcat.jdbc.pool.DataSource

4

1 に答える 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 に答える