Bonjour à tous,
je suis en train de travailler sur un projet utilisant Hibernate, et plus précisément sur une fonction pouvant traiter un grand nombre de données (typiquement un ensemble de clients desquels on récupère les commandes, desquelles on récupère les lignes commande et desquelles on récupère les produits).
Cette fonction de recherche fonctionne parfaitement avec des critères de sélection très précis mais déclenche des exceptions "OutOfMemory : Java Heap Space" dès que les critères deviennent trop vagues (par exemple recherche uniquement sur le nom du client, au lieu de son identifiant).
J'ai donné plus de mémoire à Tomcat en configurant l'option JAVA_OPTS dans le script de lancement Catalina.bat (travaillant sous Windows) ce qui a permis d'effectuer des recherches un peu plus grosses, sans pour autant permettre des recherches réellement importantes.
J'essaye donc de travailler sur le cache de niveau 1 de Hibernate, en supprimant les objets dont je n'aurai plus besoin dans la suite de la fonction.
Voici un exemple de code que j'utilise pour supprimer ces objets :
J'ai vérifié si la session Hibernate ne contenait plus mon objet après la suppression à l'aide de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // on supprime la commande du cache de la session Hibernate courante afin de gagner de la mémoire this.sessionHibernate.evict(commande);
...et le retour est concluant : l'objet ne se trouve plus dans la session.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if(this.sessionHibernate.contains(commande)) { System.out.println("OK"); }
Pourtant malgré tout cela, la mémoire attribuée à Tomcat continue d'augmenter et ne se stabilise pas comme je l'aurai pensé, et continue donc de me donner ces satanées erreurs...
Ai-je oublié quelque chose ? Est-ce normal (non, clairement) ? Y a-t-il un autre moyen de faire ?
Merci par avance pour vos réponses,
MiniMarch
Partager