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

Interfaces Graphiques en Java Discussion :

[Image]Liberation des ressources


Sujet :

Interfaces Graphiques en Java

  1. #21
    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
    je viens d'essayer avec java 6 (au cas ou y aurait une eu correction sur ce point) mais malheureusement ca ne change rien, la mémoire n'est tjs pas libérée.

    Je repete que je met bien TOUTES mes références à null, je fais des dispose(), des flush, des runFinalization, je force le passage du gc mais pas moyen, j'ai tjs cette pxxx d'OutOfMemoryException.

    Comme je l'ai déjà précisé je scrute le contenu de la ReferenceQueue dans laquelle sont référencée mes images, le gc passe bien dessus mais la mémoire n'est pas libérée (-> même problème que le post dont j'ai envoyé l'url)

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Je te poste un code de test qui verifie la liberation mémoire des BufferedImage.

    Peut être qu'en le comparant avec ce que tu fais dans ton application, on pourra vérifier ce qui ne va pas.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public class TestBufferedImage {
     
        public static void main(String[] args) {
            String filename = "D:/digestion.JPG";
            BufferedImage[] images = new BufferedImage[5];
            int index = 0;
     
            try {
                traceMem("Start");
     
                for (int i = 0; i < images.length; ++i) {
                    images[i] = ImageIO.read(new File(filename));               
                    traceMem("Image "+i+" created");
                }
     
                index= 0;
                for (int i = 0; i < 100; ++i) {
                    images[index] = ImageIO.read(new File(filename));
                    index++;
                    index %= images.length;
                    if (index == 0)
                        traceMem("i="+i);
                }
     
                for (int i = 0; i < images.length; ++i) {
                    images[i]=null;
                }
                System.gc();
                System.gc();
                System.gc();
                traceMem("===>");
     
                index= 0;
                for (int i = 0; i < 100; ++i) {
                    images[index] = ImageIO.read(new File(filename));
                    index++;
                    index %= images.length;
                    if (index == 0)
                        traceMem("i="+i);
                }
     
                for (int i = 0; i < images.length; ++i) {
                    images[i]=null;
                }
                System.gc();
                System.gc();
                System.gc();
                traceMem("===>");
     
     
            } catch (IOException e) {           
                e.printStackTrace();
            }
        }
     
        private static void traceMem(String msg) {
            Runtime rt = Runtime.getRuntime();
            System.out.println(msg+" : "+(rt.totalMemory()-rt.freeMemory()));
        }
     
    }

  3. #23
    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 en executant ton code, la mémoire est bien libérée après le passage du gc mais y a quand même un truc qui me chiffonne : apres le passage du gc, la mémoire utilisée obtenue en faisant totalMemory-freeMemory montre bien que la mémoire a été libérée. En revanche si j'ouvre le gestionaire de tache de windows la colonne "Utilisation mémoire" de mon process java.exe reste très élevé (> 50 Mo).
    Qui dois-je croire dans ce cas ?

  4. #24
    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
    C'est que tu n'as pas pigé comment fonctionne la JVM pour la gestion de la mémoire. La mémoire que l'OS annonce comme allouée à ton programme ne reflète pas la mémoire que le programme utilise réellement au sein de la JVM. File te documenter sur le Garbage Collector et la JVM
    Romain Guy
    Android - Mon livre - Mon blog

  5. #25
    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 j'ai peut-etre quelques lacunes sur le sujet.
    Un bon article à me conseiller ?

    (cela dit il y a quand même un soucis de libération, sinon je n'aurais pas d'OutOfMemoryException)

  6. #26
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Juste par curiosité. Essaye de charger les images, mais ne les affiche pas. cad que ds ton paintComponent, tu fasses rien.

    C'est peut etre pas le chargement qui est en cause...

  7. #27
    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, si je charge mes images mais que je ne les affiche pas, non seulement la mémoire est bine libérée mais en plus l'occupation mémoire est fotemment réduite... j'y comprends plus rien !

Discussions similaires

  1. Image issue des ressources de l'application
    Par rtg57 dans le forum Jasper
    Réponses: 2
    Dernier message: 14/05/2015, 07h42
  2. Image à partir des ressources
    Par Bernard B dans le forum Langage
    Réponses: 3
    Dernier message: 09/01/2012, 17h59
  3. Internationalisation d'image avec des ressources
    Par diab_olik dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 07/04/2010, 05h44
  4. Réponses: 4
    Dernier message: 14/10/2003, 08h58

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