1

我正在使用缓存 PreparedStatements 的内部数据库连接池。当连接返回到池中时,缓存的 Statements 不会关闭。这些在 mySQL 驱动程序中创建 OutOfMemoryExceptions。所以我打算将 PreparedStatement 缓存存储在 HashMap <String, SoftReference<PreparedStatement>>

但这不允许我在语句被 GC 之前关闭它们。

我猜使用 ReferenceQueue 没有用,而且我已经读过不建议使用 finalize 方法。

4

2 回答 2

1

可能覆盖 finalize() 可以帮助吗?

于 2012-12-16T08:08:34.760 回答
0

您应该检查Guava 缓存。您可以使用softValues()方法 aRemovalListener来关闭PreparedStatementon eviction。

如果你真的想用 open 填充你的内存PreparedStatement,或者如果你有一个固定的缓存大小会更好,并驱逐最近最少使用的条目。

于 2012-12-16T10:45:19.927 回答