我正在开发一个程序,用于解析文件中的数据并将其存储到HSQLDB数据库中。当解析器遇到数据时,它会创建使用JPA/Hibernate映射到数据库的实体。 我的问题是,解析正在执行时,应用程序使用越来越多的内存。我已经成功地使用了缓存表,这样一旦解析完成,内存就全部释放,但在解析过程中,它使用的方式比我感到舒服的多。JPA/HSQLDB仍在吃我所有的内存
我试图通过在我的EntityManager上调用flush
和clear
方法来解决这个问题,但是这没有效果。我也试图确保实体与所有其他实体的引用保存在内存中。
内存中最大的对象似乎是hsqldb.Sessions。难道HSQlDb会缓存每笔交易的大量数据吗?如果仅仅需要1GB的RAM,那么在磁盘上只有120MB的数据库才会结束呢?
请告诉我可以尝试下一步。
尝试手动刷新的实体管理器而坚持的实体。调用EntityManager.flush()可以清除内存中不必要的引用。但我不知道它是否能解决你的问题。 – 2010-10-09 21:03:19
@feridcelik - 我目前正在冲洗,然后清除:) – willcodejavaforfood 2010-10-09 21:10:47