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 :

[Performance] La memoire n'est pas desalloulee


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut [Performance] La memoire n'est pas desalloulee
    Bonjour a tous,

    J'ai fait des recherches sur le forum sur les posts concernant la memoire. J'ai cru comprendre qu'on ne pouvait pas y faire grand chose car la JVM gere ca pour nous.

    Le probleme c'est que mon application (de type Stand Alone en swing) est gourmante en memoire pour certaines taches (ce qui me parait normal) mais une fois les taches effectuees, la memoire n'est pas liberee.

    Exemple de scenario :
    J'ai une barre de boutons. Sur chaque bouton, il y a un ActionListener.
    Imaginons que je clique sur le bouton Importer les donnees, l'ActionListener associe cree une instance de la classe Importation. Cet object fait divers operations gourmandes en memoires.

    Une fois les operations terminees, je clique sur le bouton Afficher les villes, l'ActionListener associe cree une instance de la classe CitiesDisplayer qui elle ne consomme pas beaucoup de memoire.
    A priori, a ce moment, je n'ai plus de reference sur l'objet Importation et pourtant la memoire n'est pas liberee.
    Ce qui fait qu'au cours de l'utilisation de mon application, la memoire occupee augmente et lorsque je vais effectuer d'autres taches qui consomment de la memoire, j'obtiens une "OutOfMemoryException".

    Quelqu'un aurait il des idees pour ameliorer ceci ou me donner des pistes pour trouver la cause du probleme.

    Merci d'avance,
    sylvain_2020

    PS : si ce n'est pas clair, je peux reexpliquer

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Par défaut
    fais tu un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monImportation = null ;
    monImportation.finalize();
    Ainsi tu flag ton objet pour la destruction.
    Ensuite, soit tu appelles le garbage, soit tu le laisses faire.

  3. #3
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Merci pour ta reponse mais au vu de mes recherches, il semble que ce ne soit pas forcement des bonnes idees.

    - http://www.developpez.net/forums/vie...ight=optimiser
    - http://www-106.ibm.com/developerwork...l?ca=drs-j0504

    A en lire les informations, j'avoue que je ne sais pas trop quoi faire ...

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Par défaut
    Il doit y avoir quelque part dans ton code un objet qui garde un lien vers le gros gourmand..

    Quelques questions, pour débroussailler :

    - Est-ce que chaque bouton a son propre ActionListener ? Est-ce le même pendant toute la durée du programme ?

    - Est ce que au cours de l'opération tu utilises des attributs ? Lances-tu des threads ?

    - Es-tu sûr que la méthode de ton premier ActionListener se termine bien ?

    - C'est quoi ces opérations gourmandes en mémoire ? Fais-tu les dispose et close règlementaires ?

  5. #5
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    merci pour ta reponse, je vais etudier les differents points que tu as mentionnes et je reviens ...

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Par défaut singleton
    parfois, des instance servant a effectuer des actions sont créées plusieurs fois pour rien en pensant que le GC va nettoyer. Dans le cas ou ca occupe trop de place il faut penser au pattern Singleton quand c possible.

    Perso, je le trouve tres util et tres economiseur de ram

    waddle

    --
    EPITA Student
    Promo 2006

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 31
    Dernier message: 22/04/2014, 14h55
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 13h09
  4. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 17h48
  5. Index n'est pas a jour
    Par touhami dans le forum Paradox
    Réponses: 5
    Dernier message: 11/12/2002, 14h47

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