Bonjour à tous,
Je suis en train de faire une application qui traite des listes de discussion.
J'ai donc un objet Projet, qui contient un tableau d'objets Liste.
Chaque objet Liste contient un tableau d'objets Message.
Chaque objet Message est constitué de 12 champs : nom, date, mail ... etc.
Tous ces objets sont sérialisés lors de chaque mise à jour de l'objet Projet ou Liste (Observer/Observable).
Je lance mes processus à l'aide de SwingWorkers:
- Lorsque j'ajoute une première liste et que j’extrais pour la première fois mettons 50000 messages, tout se déroule parfaitement, en un peu moins de 10 secondes.
- Mais lorsque je réitère le processus pour la seconde fois en ajoutant une nouvelle liste avec 50000 Messages, un ralentissement énorme se fait vers 90%.
- Et lorsque le processus parvient enfin à se terminer, je ne peux même pas dépasser les 2% pour l'ajout d'une troisième liste.
J'ai téléchargé Memory Analyser, mais je ne vois pas grand chose dans les fuites potentielles, à part bien sûr des ArrayList énormes (mes 50000 messages), des objets String sur-utilisés (normal je fonctionne beaucoup avec des String) ou équivalents (normal aussi, par exemple pour les titres de messages), et un Thread énorme, le dernier à avoir été lancé (ça je pense aussi que c'est normal vu qu'il est bloqué !)
Je me demande donc si :
- un objet qui contient 2 tableaux de 50000 objets de 10 champs, soit donc un million de champs, c'est trop pour JAVA ?
- j'ai abandonné les bases de données (H2) pour faire du tout objet et de la sérialisation car je pensais ça plus souple : faut-il que je fasse marche arrière (ça m'embêterai parce que j'avais eu des soucis de Heap Space avec les bdd) ?
- y-a-t-il d'autres outils (dans Eclipse notamment) qui pourraient me dire ce qui ne va pas ?
- lorsque je lance plusieurs SwingWorkers à la suite, ils devraient être exécutés les uns à la suite des autres non ? car j'en utilise lors de la sauvegarde (sérialisation) de mes objets, et en fait plusieurs se lancent en même temps (j'ai testé avec des fenêtres de jprogressbar indeterminate et il y en a 2 qui apparaissent en même temps) après le lancement du second processus puis se bloquent (lorsque je lance le 1er, tout va très vite et je n'en voit qu'une !).
- Et de fait, la sérialisation se passe mal car je ne peux pas désérialiser ensuite.
- Plus généralement sur les SwingWorkers : en fait je les ai utilisé car j'avais des soucis de mise à jour de ma progressbar d'extraction des messages. Ça marche très bien, mais fondamentalement je n'en ai pas vraiment besoin car je travaille séquentiellement (les traitements que je fais après sur les messages ne peuvent se faire que si les messages ont été extraits !). Dons je me retrouve à lancer plein de SwingWorkers ... d'où peut-être le blocage ?
- avez-vous d'autres idées ?
Partager