Je travaille sur un programme qui analyse les données d'un fichier et les stocke dans une base de données HSQLDB. Lorsque l'analyseur rencontre des données, il crée des entités qui sont mappées à la base de données en utilisant JPA/Hibernate. Mon problème est que pendant l'analyse, l'application utilise de plus en plus de mémoire. J'ai utilisé avec succès des tables mises en cache pour que, une fois l'analyse terminée, la mémoire soit entièrement libérée, mais pendant l'analyse, elle utilise beaucoup plus que ce que je suis à l'aise.JPA/HSQLDB est toujours en train de manger toute ma mémoire
J'ai essayé de résoudre ce problème en appelant les méthodes flush
et clear
sur mon EntityManager, mais cela n'a eu aucun effet. J'ai également essayé de m'assurer que l'entité avec des références à toutes les autres entités est gardée en mémoire.
Les objets les plus volumineux en mémoire semblent être hsqldb.Sessions. Se pourrait-il que HSQlDb met en cache des charges de données pour chaque transaction? Il semble excessif d'avoir besoin de 1 Go de RAM pour se retrouver avec un DB de 120 Mo sur le disque, n'est-ce pas?
S'il vous plaît aviser sur quoi je pourrais essayer ensuite.
Essayez gestionnaire d'entités de rinçage manuelle tout en persistant des entités. Appeler EntityManager.flush() peut effacer les références inutiles dans la mémoire. Mais je ne sais pas si cela va résoudre votre problème. –
@feridcelik - Je suis actuellement en train de tirer et puis de dégager :) – willcodejavaforfood