IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Divers problèmes de performance sur une application Swing


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    février 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 473
    Points : 831
    Points
    831
    Par défaut Divers problèmes de performance sur une application Swing
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    A ma connaissance, netbeans possède un outil pour observer la consommation mémoire (profiler).
    Sinon, avec "profiler java" sur googol tu devrait en trouver d'autres, histoire de ne pas avoir à quitter eclipse.

    Souvent, c'est un problème de références fantôme.
    Si tu as crée des listeners, fait attention à ce qu'ils utilisent des weakReferences.
    Quand tu veut détruire un objet graphique, fait bien attention aux références qui peuvent l'empêcher de se désallouer.

    J'ai un truc pour vérifier qu'un objet est bien désallouer: tu crée un thread qui possède une weak référence vers celui-ci, et toutes les secondes elle lance un gc() puis regarde si cette référence n'est pas null. Si c'est null, elle m'envoie un message "ton objet XXX est désalloué" et s'arrrête.

    edit: a voir si le freeze ne se produit pas car plus de mémoire disponible, tout le temps de cerveau disponible sur le cpu part alors dans le gc.

  3. #3
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    février 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 473
    Points : 831
    Points
    831
    Par défaut
    Citation Envoyé par merill Voir le message
    edit: a voir si le freeze ne se produit pas car plus de mémoire disponible, tout le temps de cerveau disponible sur le cpu part alors dans le gc.
    Après vérification avec jvisualvm (un profiler fourni avec le JDK depuis pas très longtemps) je me suis aperçu que c'était effectivement un problème de cet ordre là.

    Le gc n'arrive plus à nettoyer la mémoire et l'application freeze. J'essaie de localiser les memory leaks mais ce n'est pas évident. Je vais essayer de me renseigner au sujet des weakReferences et de leur intérêt.

    Merci pour ta réponse

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : avril 2002
    Messages : 13 938
    Points : 23 015
    Points
    23 015
    Billets dans le blog
    1
    Par défaut
    Salut,



    Il n'y aurait pas des appels explicites à System.gc() par hasard ? Car cela peut produire le même genre de désagrément !!!

    Si c'est le cas désactives cela avec le flag -XX:-DisableExplicitGC de la JVM...

    a++

  5. #5
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    février 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 473
    Points : 831
    Points
    831
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,



    Il n'y aurait pas des appels explicites à System.gc() par hasard ? Car cela peut produire le même genre de désagrément !!!

    Si c'est le cas désactives cela avec le flag -XX:-DisableExplicitGC de la JVM...

    a++
    Non, non rien de tout celà
    Juste du bon vieux leak, à mon avis. Y'a beaucoup de choses que j'ai pas appris en cours et que je découvre tout seul au fur et à mesure

Discussions similaires

  1. Problème de rendu sur une application
    Par pitchu dans le forum Android
    Réponses: 6
    Dernier message: 20/04/2015, 08h59
  2. [IIS 7] Problème de sécurité sur une application virtuelle
    Par yclaf dans le forum IIS
    Réponses: 0
    Dernier message: 25/07/2011, 22h04
  3. Réponses: 4
    Dernier message: 02/10/2007, 16h26
  4. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 10h11
  5. Problème de performance sur une "grosse" BD
    Par frechy dans le forum Installation
    Réponses: 9
    Dernier message: 19/09/2005, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo