Bonjour à tous,
Je développe un traitement qui récupère du contenu XML provenant d'un web service pour construire des objets. J'ai développé tous mes traitements pour une dizaine de documents XML, sauf qu'en réalité, je dois en traiter une cinquantaine, et là j'ai un soucis de mémoire (java.lang.OutOfMemoryError: Java heap space).
Au fur et à mesure des traitements, le processus de ma JVM monte en mémoire jusqu'a plus d'1Go et ça finis toujours par planter...
J'ai bien vu qu'il existait d'autres moyens pour traiter du XML comme SAX seulement j'ai besoins de parcourir les noeuds de mes documents et de vérifier certaines informations avant d'en extraire le contenu, ce que je trouve plus facile à réaliser avec DOM.
Y a t-il une ou des mauvaises pratiques à éviter avec DOM pour ménager la mémoire ?
J'utilise une classe avec des fonctions static pour traiter le XML, je déclare mes InputSource, Document et NodeList comme variables de classe, les instancie au début de mes fonctions et les met à null après les avoirs utilisés.
Je devrais peut-être faire un vrai singleton ? Et initialiser ces éléments communs à mes fonctions via le getInstance() ?
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 builder = factory.newDocumentBuilder(); is = new InputSource(new StringReader(xml)); doc = builder.parse(is);
J'attend vos conseils, je peux présenter du code mais je ne sais pas où commencer![]()
Partager