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

2D Java Discussion :

[Java2D] BufferedImage et conso mémoire


Sujet :

2D Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut [Java2D] BufferedImage et conso mémoire
    Voila un bout de code qui fait une chose toute bete, elle charge deux fois 24 images identiques dans un tableau de bufferedimage (sans aucun affichage juste des instanciation).
    Mon pb est le suivant : à la fin du chargement des 24 premières images, la conso mémoire dépasse deja les 60 Mo !!!! Alors que mon image n'a vraiment rien d'extraordinaire, c'est une JPEG en compression max qui fait 15 Ko sure mon disque
    Apres le chargement je faus un flush sur toutes mes images, la mémoire n'est pas du tout libérée.
    Et quand je charge les 24 images suivantes (à partir d'une image du même genre que le première), la conso mémoire explose et j'ai systématiquement une OutOfMemoryException.
    Est ce que j'ai oublié de faire quelque chose ? Comment je peux faire pour réduire cette conso mémoire. Il ne me semble pourtant pas que ce petit bout ce code fasse quelque chose de vraiment hallucinant c'est même plutot très basique !

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class TestImage
    {
        private BufferedImage[] tabImages;
     
     
        public TestImage()
        {
            System.out.println("début");
            tabImages= new BufferedImage[24];
            for(int i=0; i<24; i++)
            {
                try
                {
                    tabImages[i] = ImageIO.read(new File("img/image1.jpg"));
                } catch (IOException e)
                {
                    System.out.println("Erreur chargement image");
                }
            }
            for(int i=0; i<24; i++)
            {
                tabImages[i].flush();
            }
            for(int i=0; i<24; i++)
            {
                try
                {
                    tabImages[i] = ImageIO.read(new File("img/image2.jpg"));
                } catch (IOException e)
                {
                    System.out.println("Erreur chargement image");
                }
            }
            System.out.println("fin");
        }
     
        public static void main(String[] args)
        {
            TestImage test = new TestImage();
        }
    }

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Une image en memoire prend en gros largeur*hauteur*4 octets. Pour une image en 640x480 donc 1,2 Mo de RAM minimum. Multiplie par ton nombre d'images... Peu importe la taille sur le disque.
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Effectivement mon image fait 1156 / 587. Donc en faisant donc calcul j'arrive effectivement à plus de 60 Mo.
    Mais il y a deux choses que je ne comprends pas alors :

    1- Pkoi la mémoire utilisée par le premier chargement n'est pas libéré après les flush ?
    2- Si j'execute le même genre de code avec les même images en C++ avec les MFC, la conso est < à 20 Mo. Y a une explication ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/12/2012, 17h12
  2. Surveiller conso mémoire
    Par agh dans le forum Administration système
    Réponses: 2
    Dernier message: 23/02/2011, 11h29
  3. Réponses: 0
    Dernier message: 09/09/2009, 08h59
  4. gestion mémoire et BufferedImage
    Par anadoncamille dans le forum 2D
    Réponses: 15
    Dernier message: 04/02/2008, 03h15
  5. Conso mémoire/POI vs JExcel
    Par LeSmurf dans le forum Documents
    Réponses: 4
    Dernier message: 22/12/2006, 00h23

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