Java PostgreSQL连接的内存使用在执行过程中不断增加
我有一个webcrawler thar使用连接池连接到数据库并插入页面 我看到程序执行时内存使用量在增加。我猜我忘了关闭某个PreparedStatement或另一个连接对象 我调用connection.close方法,但它只将connectin返回到数据库Java PostgreSQL连接的内存使用在执行过程中不断增加,java,postgresql,memory,Java,Postgresql,Memory,我有一个webcrawler thar使用连接池连接到数据库并插入页面 我看到程序执行时内存使用量在增加。我猜我忘了关闭某个PreparedStatement或另一个连接对象 我调用connection.close方法,但它只将connectin返回到数据库 有一种方法可以查看连接中是否有打开的对象?您似乎认为您的应用程序存在内存泄漏。要开始调试,可以使用JDK附带的工具jmap(通常位于java、javac、javadoc等旁边的bin目录)。此命令将生成JVM中所有对象的内存映射。您可以在应
有一种方法可以查看连接中是否有打开的对象?您似乎认为您的应用程序存在内存泄漏。要开始调试,可以使用JDK附带的工具
jmap
(通常位于java、javac、javadoc等旁边的bin目录)。此命令将生成JVM中所有对象的内存映射。您可以在应用程序运行时运行它,并比较对象计数,以查看是否有任何类型的对象的总计数似乎在不断增加,但没有减少(由于垃圾收集)
jmap-heap-histo
如果您确实没有正确关闭语句对象,您将很快看到它们冒泡到堆栈的顶部
所有“可关闭”的对象都应该在finally块中关闭,以避免在关闭前抛出异常时在JVM中留下打开的连接、语句等
注意:在windows上,这些可执行文件具有.exe后缀。您如何知道它使用了大量内存?这是从上面来的吗?是SHR吗?SHR随时间增长到与共享缓冲区大小相等是正常的,这不是问题。请出示您的内存使用证明
jmap -heap -histo <PROCESS_ID_OF_YOUR JVM>