java JPA/HSQLDB仍然在消耗我所有的内存
我正在开发一个程序,可以解析文件中的数据,并将其存储到HSQLDB数据库中。当解析器遇到数据时,它会使用JPA/Hibernate创建映射到数据库的实体我的问题是,在执行解析时,应用程序会使用越来越多的内存我已经成功地使用了缓存表,所以一旦解析完成,内存就会全部释放,但在解析过程中,它使用的方式比我所熟悉的要多
我试图通过在EntityManager上调用flush
和clear
方法来解决这个问题,但没有效果。我还试图确保引用了所有其他实体的实体被保存在内存中
内存中最大的对象似乎是hsqldb。会议。HSQlDb会为每个事务缓存大量数据吗?在磁盘上只需要1GB的RAM就可以得到120MB的内存,这似乎太过分了,不是吗
请告诉我下一步可以尝试什么
# 1 楼答案
进行堆转储并使用Eclipse MAT分析内存的使用位置。对于JPA,结果往往令人惊讶,而且没有考虑实际的内存使用情况,你经常在黑暗中刺伤
# 2 楼答案
这可能是不同的原因。我想介绍一下内存泄漏分析工具: 1) 首先,在任务管理器中找到流程id
2)然后进行堆转储:
3)然后分析: a) JHAT util:
b)(我建议)从安装Eclipse内存分析器插件
(Eclipse:help->;安装新软件->;添加存储库)
安装它并转到它的透视图。 打开并选择选项以查找内存泄漏
对于HSQLDB: 通常MemoryAnalizer显示内存在
-然后确保你总是打电话
# 3 楼答案
在与HSQLDB闲聊了两天后,我听从了两个朋友的建议,将数据库改为H2。现在事务中的内存占用大约是三分之一,速度也快了20%
真让我吃惊