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 :

outofmemory création d'objet


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 outofmemory création d'objet
    bonjour,

    Je viens de modifier 2 petites choses dans un programme et voilà qui plante au bout de 3 jours.
    Il y a un thread qui fait des opérations sur des bufferedImage.
    J'avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public BufferedImage buffer1 = null;
    public BufferedImage buffer2 = null;
    public BufferedImage buffer3 = null;
     
    public void run()
    {
            while(....)
            {
                  buffer1 = capt.newBuffer();
                  buffer2 = capt.newBuffer();
                  buffer3 = capt.newBuffer();
            }
    }
    pas de problème

    puis j'ai fait cela :
    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
    20
     
    public BufferedImage buffer1 = null;
    public BufferedImage buffer2 = null;
    public BufferedImage buffer3 = null;
     
    public void run()
    {
            while(....)
            {
                  buffer1 = newBufferedImage(tab1,w,h);
                  buffer2 = newBufferedImage(tab2,w,h);
                  buffer3 = newBufferedImage(tab3,w,h);
            }
     public BufferedImage newBufferedImage(int[] tab,w,h)
        {
            BufferedImage bufIm = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
            bufIm.setRGB(0,0,w,h,tab,0,w);
            return bufIm;
        }
    }
    Est ce que ma fonction newBufferedImage peut provoquer un outofmemory ?
    Est ce qu'il faut mettre buffer1 = null;buffer2 = null;buffer3 = null à chaque passage pour libérer la mémoire ? Perso, je pensais que dans mon cas ça écrasait.

    Merci d'avance de votre aide

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Selon la taille de l'image, un new BufferedImage peut provoquer un OutOfMemory.

    Inutile sur le code que tu nous présentes de mettre buffer1 = null pour libérer la mémoire.

    Attention que le traitement d'image est un des domaines où il faut faire attention dans l'usage de la mémoire, non seulement parce qu'il consomme beaucoup, mais que en plus il consomme des zones mémoires pas forcément libérées par le ramasse miettes (il faut bien penser à faire les dispose ou close), et que souvent il traine des buffers partiels qui accumule la mémoire pour peu qu'on les réutilise.

  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
    bonsoir,
    merci de ta réponse.

    Effectivement j'avais un inputstream qui sert au traitement dans un thread qui n'était mal fermé.... Et cette class est appelé assez souvent.

    Le fait de passer les buffer1 à null ne peut il pas aider le GC ?

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Non le fait de passer le buffer à null n'aide pas GC, au contraire. Ce qui aide le GC est que les variables soient placées dans les blocs où elles sont vraiment utiles, et non comme attributs d'instances alors qu'elles ne sont utilisées que dans une boucle while (par exemple).

    Et, bien sûr et ofcourse, que l'on fasse les close des streams, particulièrement ceux qui servent à lire les images

Discussions similaires

  1. [PowerBuilder] Création d'objets dynamiques
    Par Béné123456789 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 00h33
  2. création d'objet en mémoire partagé
    Par BigNic dans le forum C++
    Réponses: 6
    Dernier message: 28/11/2005, 18h41
  3. Réponses: 11
    Dernier message: 16/10/2005, 20h21
  4. [JMenuBar] Création d'objets à la volée
    Par Rampa dans le forum Composants
    Réponses: 5
    Dernier message: 29/06/2005, 13h56
  5. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00

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