我正在使用内部数据库连接池来缓存PreparedStatements。连接返回到池时,缓存的语句不会关闭。这些在mySQL驱动程序中创建OutOfMemoryExceptions。所以我打算将PreparedStatement缓存存储在HashMap< String,SoftReference< PreparedStatement>>
中但这不允许我在GC之前关闭语句。
我猜想使用ReferenceQueue是没用的,我已经读过不建议使用finalize方法。
答案 0 :(得分:1)
可能会覆盖finalize()有帮助吗?
答案 1 :(得分:0)
您应该检查Guava caches。您可以使用softValues()
方法RemovalListener
在驱逐时关闭PreparedStatement
。
无论如何,如果你真的想用开放的PreparedStatement
填充你的记忆,或者如果你通过拥有固定的缓存大小并且驱逐最近最少使用的条目会更好。