Bonjour à tous !
Je suis en train de développer une application Swing pour une société et les utilisateurs rencontrent des soucis de performance.
Je charge pas mal de données et l'utilisation de la RAM augmente assez vite.
J'ai identifié assez clairement, je pense, les endroits qui font que l'application va ramer.
Un bouton à gauche permet d'afficher une liste de sociétés, le logiciel en charge l'intégralité pour l'affiche dans une JTable. En gros, j'en charge 20 000.
Le fait de toutes les charger me permet ensuite d'utiliser des mécanismes de filtrage par champs qui se révèlent très performants, le contenu de la JTable s'adaptant suivant ce que tape l'utilisateur.
C'est un comportement qu'il est à mon impossible d'avoir sans charger l'intégralité des sociétés.
Au bout d'un certain temps il y a de gros ralentissements dans l'utilisation de l'application, ce que je peux comprendre vu l'utilisation en RAM que j'observe après quelques minutes seulement d'utilisation (Environ 500Mo, j'ai positionné le -Xmx à 512M)
- Je voulais savoir s'il était possible, via le langage, de "mesurer" la mémoire utilisée par un objet ou une collection ? J'utilise à l'heure actuelle le gestionnaire des tâches de windows mais ce n'est peut-être pas pertinent vu que la JVM a une gestion de la mémoire particulière.
Un second point identifié par les utilisateurs survient lorsque l'application est démarrée depuis plusieurs heures, dès qu'ils recommencent à l'utiliser à ces moments là l'application freeze complètement, obliger de killer le processus javaw.exe pour relancer l'application.
Le souci c'est que je n'ai aucune donnée pour m'aider, je ne sais pas si un Thread est bloqué, ou si une librairie que j'utilise buggue ou quelque chose de ce genre...
Comment dois-je m'y prendre d'après vous pour identifier ce qui fait que ça plante ? Le problème semble survenir à n'importe quel endroit du logiciel à partir du moment où il n'a pas été utilisé depuis un certain temps.
Je vous remercie d'avance pour votre aide
Partager