首页 > 解决方案 > H2 数据库(内存模式)关闭不释放内存

问题描述

我正在使用具有以下配置的内存 h2 数据库:

jdbc.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1
hibernate.dialect=org.hibernate.dialect.H2Dialect
jdbc.user=sa
jdbc.pass=

我可以看到系统上使用的内存不断减少。一旦我重新启动应用程序,内存就会恢复。我得到了内存转储,但它没有显示任何占用大量内存的正在运行的线程。我猜这是因为 h2 数据库。

我检查了 jmap 结果,它显示以下内容:

前:

在此处输入图像描述

free 命令的结果

我尝试使用 h2 关闭并手动调用 System.gc()。这有助于 jmap 如下所示:

后:

在此处输入图像描述

但是,释放的内存永远不会到达操作系统/系统。使用的内存既不会下降也不会增加可用内存!

在此处输入图像描述

我在这里想念什么?如果内存不断增加,我的机器运行几天后总是会死机?不能保持每2天重新启动一次!

标签: jvmh2in-memory-database

解决方案


推荐阅读