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

Langage Java Discussion :

[Fuite de memoire]


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut [Fuite de memoire]
    Bonjour,

    Je viens de tester mon appli sur le profiler de netbeans et la surprise et qu'il y a des objets qui se créent. Cela n'est pas flagrant car le nombre de surviving generation monte et décend en court du temps. Autre remarque, mon heap size n'augmente pas.
    Bref, j'ai isolé les parties de mon code et il y un morceau de code qui génére un objet à chaque passage. Toutefois, je ne vois ce qui ne va pas.
    J'aurais donc besion de votre regard éclairé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    private BufferedImage imageInterface() throws InterruptedException, InvocationTargetException
        {
            int w = G.getWidth();
            int h = G.getHeight();
            final BufferedImage image;
            if(w!=0 && h!=0)
            {
                image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
     
                SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    Graphics2D graph = image.createGraphics();
                    g.G.paint(graph);
                    graph.dispose();
                }});
                return image;
            }
            return null;
        }
    cette méthode capture le panel G de l'interface.

    Merci d'avance.

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par philippe13 Voir le message
    Bref, j'ai isolé les parties de mon code et il y un morceau de code qui génére un objet à chaque passage. Toutefois, je ne vois ce qui ne va pas.
    Ben cette méthode te crée un objets (et même 2 avec le Runnable) à chaque passage... donc c'est un peu normal.


    Je ne comprend pas trop ton problème. Pourrais-tu détailler un peu (et éventuellement mettre des screenshots de ce que te donne ton profiler)

    a++

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    Mon problème est qu'en postant sur le forum de netbeans sur la sinification du surviving generation on m'a dit que s'il ne se stabilisait pas (augmentation régulière) alors c'est que l'on avait une fuite de mémoire.
    Et cette méthode fait augmenter le surviving generation. La courbe monte est décend, mais elle a tendance à plus monter que décendre.... D'où mes doutes sur la bonne confexion de ma méthode.
    Donc est ce que j'aurais oublié de faire quelque chose permettant au gc de faire le ménage ?
    J'espère avoir était un peu plus claire.

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Et que fais-tu de l'image retournée par cette méthode ?

    a++

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    je l'enregistre sur le disc et un envoie FTP. Mais quand j'ai fait le test je n'engistrais pas. Simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bufferImage = null;
    bufferImage = imageInterface();
    Mais là je suis entrient de faire un test globale avec quelque modif que j'ai apporté à la suite des différents tests. Et ça a l'aire d'être stable.
    J'y comprends pas grand chose... En utilisant des méthodes, qui me semble bien faite, toute seule ça a l'aire de pas aller. Et quand je mets tout le monde ensemble ça a l'aire d'aller. C'est vraiment étrange. J'ai du passé à côté d'un ou plusiers trucs!

    J'ai vérifié tout mes flux, que toutes mes boite de dialog finisent par dispose(), que les champs soit mis à null s'il n'était pas utilisé.
    Est ce qu'il y a d'autre chose aux quelques je dois faire attention ?

    Merci de ton aide

  6. #6
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    une supposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.invokeAndWait(new Runnable() {
    ce n'est pas normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.invokeLater(new Runnable() {
    non?

    Le fait d'avoir le "AndWait" n'imposerai pas quelque part d'avoir a appeler une methode pour libéré cette ressource dans l'EDT ?

    Je ne connais pas grand chose a l'EDT mais je trouve bizarre d'utiliser cette methode pour faire ca.

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    Le fait d'avoir le "AndWait" n'imposerai pas quelque part d'avoir a appeler une methode pour libéré cette ressource dans l'EDT ?
    Si je mets un invokeLater alors la méthode return null. Ce qui est normal, puisque le bufferedImage est construire dans un thread appart.

    Sinon l'appli s'ensemble être devenue stable. Mais tout cela reste très mistérieux pour moi.

    Merci à tous.

Discussions similaires

  1. [JVM]Fuite de mémoire
    Par anykeyh dans le forum Général Java
    Réponses: 6
    Dernier message: 28/09/2009, 22h43
  2. [memoire]Fuite de memoire?
    Par clovis dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2006, 22h04
  3. Outils pour rechercher des fuites de memoires dans un prog
    Par elekis dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 29/04/2005, 21h06
  4. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46
  5. correction de fuite de memoire
    Par vince3320 dans le forum C
    Réponses: 38
    Dernier message: 28/06/2004, 11h27

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