我在我的程序上运行了一个堆转储。当我在内存分析器工具中打开它时,我发现org.logicalcobwebs.proxool.ProxyStatement
的java.lang.ref.Finalizer
占用了大量内存。为何会这样呢?
发布于 2011-12-02 19:05:48
据我所知,Proxool是一个用于JDBC连接的连接池。在我看来,问题在于您的应用程序滥用了连接池。您的代码可能会删除语句对象和/或其父连接,而不是对语句对象调用close
。Proxool依赖于终结器来关闭底层驱动程序实现的对象...但这需要这些Finalizer实例。这也可能意味着您正在导致连接打开/关闭(实际)数据库连接的频率比必要的更高,这将对性能造成不良影响。
因此,我建议您检查代码中是否有泄漏的ResultSet、语句和/或连接对象,并确保在finally
块中关闭它们。
看一下内存转储,我希望您关心的是898,527,228字节的去向。绝大多数由id为2aab07855e38
的终结器对象保留。如果您仍然拥有转储文件,请查看该Finalizer
所引用的内容。它看起来比Proxool对象更有问题。
https://stackoverflow.com/questions/8355064
复制相似问题