一尘不染

Java MySQL JDBC内存泄漏

mysql

好的,所以我的程序有很多(〜300)线程,每个线程都与中央数据库通信。我创建了一个与数据库的全局连接,然后每个线程进行其业务创建语句并执行它们。

一路上的某个地方,我发生了大量内存泄漏。在分析堆转储之后,我看到com.mysql.jdbc.JDBC4Connection对象为70 MB,因为它在“
openStatements”(哈希映射)中有800,000个项目。在某个地方,它不能正确地关闭我创建的语句,但是我无法终生弄清楚在哪里(每次我打开一个语句时,我也会关闭它)。任何想法为什么会发生这种情况?


阅读 567

收藏
2020-05-17

共1个答案

一尘不染

您知道除非MySQL这么说,否则JDBC连接不是线程安全的。您不能跨线程共享它们,除非您使用连接池。此外,如前所述,您应该尝试/最终保证所有语句,结果集和连接均已关闭。

2020-05-17