1

PreparedStatementsをキャッシュする社内のDB接続プールを使用しています。接続がプールに戻されるとき、キャッシュされたステートメントは閉じられません。これらはmySQLドライバーでOutOfMemoryExceptionsを作成します。そのため、PreparedStatementキャッシュをHashMap <String、SoftReference<PreparedStatement>>に格納することを計画しています。

しかし、これでは、GCされる前にステートメントを閉じることができません。

ReferenceQueueを使用しても役に立たないと思いますが、finalizeメソッドはお勧めできません。

4

2 に答える 2

1

finalize()をオーバーライドすると役立つ可能性がありますか?

于 2012-12-16T08:08:34.760 に答える
0

Guavaキャッシュを確認する必要があります。softValues()メソッドaを使用して、立ち退き時RemovalListenerに閉じることができます。PreparedStatement

とにかく、メモリをオープンでいっぱいにしたいPreparedStatement場合、またはキャッシュサイズを固定し、最も使用頻度の低いエントリを削除する方がよい場合は、とにかく検討してください。

于 2012-12-16T10:45:19.927 に答える