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 :

Consommation mémoire en java


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut Consommation mémoire en java
    Salam,
    Je developpe un jeu en java, mon probleme c'est que mon aplli consome bcp en memoire mais lorsque je reduit puis je restaure la fenétre la memoire occupé deminu à la moitié .
    Est ce que vous pouvais m'expliquer pour koi ?

    Et si j'instance une classe 2 fois ,ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Jlabel MyLabel;
    MyLabel=new JLabel(new ImageIcon("ico1.ico"));
    MyLabel=new JLabel(new ImageIcon("ico2.ico"));
    Est ce que l'espace occupé lors de la 1ere instantiation est recupérer ?
    Merci d'avance !

  2. #2
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    je pense que tu devrais essayer de mettre en cache les images surtout si tu les utilises plusieurs fois. Tu peux créer une HashMap avec pour clé le nom de l'image et pour valeur sa reference.
    Comme ça dés que tu veux atteindre l'image ou la créer, tu regardes dans la table de hashage si elle y est déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     HashMap mesImages = new HashMap();
    [...]
    if (mesImages.get(nomImage) != null)
    		{
    			return (ImageIcon) mesImages.get(nomImage);
    		}
    Si elle n'y est pas, il faut la créer et la mettre en cache dans la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mesImages.put(nomImage,referenceAl'imageQueT'asCréé);
    Je sais pas si ça te sera util mais bon j'aurai essayé

  3. #3
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par faico
    Est ce que l'espace occupé lors de la 1ere instantiation est recupérer ?
    Oui, c'est le role du Garbage Collector.

  4. #4
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut
    Salam,
    Mais mon probleme c'est que mon prog ne recupere cette espace que si je reduit ma fenetre ????

  5. #5
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    peut etre en obligeant le garbage collector à effacer l'ancien objet non referencé ?
    Mais d'aprés la FAQ, ça ne marcherait pas à tous les coups .

  6. #6
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut
    Salam,
    J'ai encore le mm prob

  7. #7
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Je suis désolé, mais je ne suis pas du tout d'accord avec vous :

    1 - Le rôle du Garbage Collector n'est pas (il me semble) de distribuer la mémoire lors d'une instanciation, mais d'en libérer quand le besoin s'en fais sentir.
    Jlabel MyLabel;
    MyLabel=new JLabel(new ImageIcon("ico1.ico"));
    MyLabel=new JLabel(new ImageIcon("ico2.ico"));
    Rappelez-vous : on peut considérer java soit en "sans pointeur", soit en "tout pointeur". En l'occurence, le pointeur MyLabel, lors de la deuxième instanciation va désigner la même zone mémoire que lors de la première, l'Objet physique sera donc remplacé.

    2 - le fait de construire nue HashMap ne lui permettra pas d'obtenir 1 programmme léger en mémoire, tout au contraire. Reste à savoir quel facteur du rapport "volume mémoire / rapidité" faico veut privilégier.

    Pour la solution, je suis désolé mais je ne vois pas.

  8. #8
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par NeptuS
    En l'occurence, le pointeur MyLabel, lors de la deuxième instanciation va désigner la même zone mémoire que lors de la première, l'Objet physique sera donc remplacé.
    Là je ne suis pas d'accord. Lorsque tu fais un new une nouvelle zone mémoire va être alloué et on va perdre la référence du 1er label.
    le pointeur MyLabel va donc pointer sur la deuxième zone crée.
    C'est le même pointeur mais avec une valeur différente

  9. #9
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    au temps pour moi

  10. #10
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Mais je peux me tromper.

  11. #11
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par gronono
    Là je ne suis pas d'accord. Lorsque tu fais un new une nouvelle zone mémoire va être alloué et on va perdre la référence du 1er label.
    le pointeur MyLabel va donc pointer sur la deuxième zone crée.
    C'est le même pointeur mais avec une valeur différente
    +1

    En effet il y a bien 2 objets de créer, et comme tu perds la référence vers le premier, il sera nettoyé à un moment ou un autre par le GC...


    Citation Envoyé par faico
    Je developpe un jeu en java, mon probleme c'est que mon aplli consome bcp en memoire mais lorsque je reduit puis je restaure la fenétre la memoire occupé deminu à la moitié .
    Est ce que vous pouvais m'expliquer pour koi ?
    Il me semble qu'il peut y avoir des problèmes comme cela sous Windows, où la mémoire libéré par les applications n'est pas toujours libéré par le système... et que le fait de diminuer la fenêtre semble "forcer la main"...

    Et cela pour tout type d'application (pas forcément Java).


    Si tu es sous Java 5.0, tu peux utiliser MemoryMXBean pour avoir une idée précise de la mémoire utilisée par ton application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
            System.out.println( mbean.getHeapMemoryUsage() );
    Citation Envoyé par faico
    Est ce que l'espace occupé lors de la 1ere instantiation est recupérer ?
    Oui, c'est le rôle du GarbageCollector. Par contre rien n'oblige à ce que cela soit fait immédiatement. Le GC est libre de choisir le meilleur moment pour effectuer cela...

    a++

  12. #12
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    2 - le fait de construire nue HashMap ne lui permettra pas d'obtenir 1 programmme léger en mémoire, tout au contraire.
    Justement ma solution était faite pour ça et pour ne pas avoir de references multiple pour une seule image. Pour mon jeu ça semble bien marcher. Maintenant je suis pas expert, loin de là donc je peux me tromper

  13. #13
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Les objets qui ne sont plus référencé seront supprimé de la mémoire par le garbage quand celui ci estimera qu'il sera nécessaire de libérer de la mémoire ...

    Je pense pas que tu ai vraiment de souci a te faire de se coter là...



    Citation Envoyé par faico
    mais lorsque je reduit puis je restaure la fenétre la memoire occupé deminu à la moitié .
    Est ce que vous pouvais m'expliquer pour koi ?
    Moi je pense que c'est la garbage collector qui démare a se moment là, il profite que l'application ne sois pas utilisé par l'utilisateur pour faire un ptit nettoyage ... (j'en suis pas certain)

  14. #14
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    j'ai pas lu tout
    j'ai une petite question
    tu a essayer de voir avec un profiler?

    parce que peut être tu alloue beaucoup de memoire quelque part d'autre et que ca a rien a voir avec tes creation d'objet que t'a dit.

  15. #15
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut
    Salam,
    Je n'ai pa tester le profiler et je connais pas qu'est ce que c'est que un profiler ?

  16. #16
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    y'a un autre message sur le profiler.
    un profiler c'est un programme qui te permettre de mesurer les performance de ton programme a toi.
    comment ca marche?
    1) tu lance le profiler
    2) tu lance ton programme
    3) tu utilise ton programme a ce moment le profiler enregistre des truc
    4) tu quitte ton programme et le profiler t'affiche un resultat.

    souvent on integre le profiler a l'ide ;-)

    si tu utilise IDEA: File > Setting > Plugings > Available tu as JProfiler

  17. #17
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut
    Salam,

  18. #18
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    salam :-)

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/11/2011, 14h00
  2. Consommer des services WSDL en Java
    Par M4v3rick dans le forum Services Web
    Réponses: 0
    Dernier message: 08/12/2010, 23h38
  3. Créer et consommer un web service en Java
    Par jawadev dans le forum Services Web
    Réponses: 1
    Dernier message: 20/11/2009, 11h25
  4. consommer un service web en java
    Par kat35 dans le forum Services Web
    Réponses: 3
    Dernier message: 14/10/2007, 19h59
  5. Comment consommer un web service en java
    Par Vins83 dans le forum Services Web
    Réponses: 1
    Dernier message: 16/01/2006, 23h33

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