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 :

Grosse consommation mémoire de mon application


Sujet :

Langage Java

  1. #1
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut Grosse consommation mémoire de mon application
    Bonjour,

    J'ai une application qui utilise Quicktime et qui lit une séquence de vidéos.

    Mon application, bien que lisant pour l'instant toujours les 3 mêmes vidéos, utilise au fur et à mesure des lectures de + en + de mémoire vive.

    Comment puis je parer à ce phénomène

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    en trouvant d'ou vient la fuite mémoire
    comme ca ca va pas etre facile de t'aider, mais faut chercher ce qui est ouvert, et pas (ou mal) fermé...

  3. #3
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Moi je sais ! ça vient de la variable i qui est réinstanciée en permanence dans la méthode get de la classe Personne ! Je prédis même qu'il y aura plantage de l'application samedi à 13h21 si tu lances éclipse en même temps !
    .
    .
    .
    .
    .
    Désolé

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Ah d'accord, je savais pas, comme quoi Enintein et la théirie de la relativité générale s'applique totalement au monde cahotique de l'informatique... Vous ne croyez pas ?

    Par contre moi j'ai mon appli qui plante, vous savez à quoi c'est dû ?

  5. #5
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Ahahah ... Oui bon je vous l'accorde, ma question est un peu générale, mais je pensais surtout que vous auriez eu des informations sur la mémoire résiduelle en Java et comment faire pour m'en débarasser. Pour ce qui est de fuites mémoires je ne vois vraiment pas où cela peut se situer mon code est vraiment soft. Peut-être est-ce l'API quicktime qui laisse ces résidus en mémoire.

  6. #6
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 500
    Par défaut
    Vous n'êtes pas sympa. Ok il faut être précis dans les questions, mais là peut-être qu'il ne sait absolument rien du fonctionnement du gc.

    Donc pour répondre un peu plus constructivement :
    Une fuite de mémoire peut être causée par des objets qui restent en mémoire alors que tu n'en as plus besoin.

    Par exemple, si à chaque fois que tu lis une video tu stocke des infos dans une List ou je ne sais quoi, et que quand tu lis une autre video après, tu ne vides pas cette liste. Les objets restent référencés dans la liste et donc ne sont pas supprimés de la mémoire.

    En gros, pour être sûr, assure toi de mettre une référence à null lorsque tu t'en sers plus.

  7. #7
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Voila une réponse un peu plus constructive.

    Je connais le fonctionnement global du garbage collector, mais outre l'appel à System.gc(), n'y a-t-il pas un genre de méthode deallocate() ou je ne sais quoi ?

  8. #8
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    Salut,

    Non, Java ne permet pas de gérer la mémoire directement, le gc s'en occupe tout seul.

    Comme l'a précisé Satch, tu peux mettre tes références à null quand tu ne t'en sers plus, ou bien faire un système de classe suffisament simple pour n'avoir qu'une référence à un objet donné à un instant T, et le gc s'occupera normalement de le vider.

    Question : tu accèdes comment à ton API Quicktime ? Via JNI ? Si oui, alors il y a des chances pour que tu ne vides pas la mémoire allouée par Quicktime, car via JNI, tu peux attaquer du C ou du C++.. Il faudra que dans ton code source C ou C++ ( si c'est ce que tu utilises ) tu fasses la gestion de mémoire liée à ces langages.

    A+

  9. #9
    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 muad'dib
    Je connais le fonctionnement global du garbage collector, mais outre l'appel à System.gc(), n'y a-t-il pas un genre de méthode deallocate() ou je ne sais quoi ?
    Non. Et tu ne devrais même pas à appeller System.gc() pour que la mémoire soit libérée...


    Franchement c'est difficile de t'aider sans plus de détail sur ton code...

    a++

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    Citation Envoyé par muad'dib
    Je connais le fonctionnement global du garbage collector, mais outre l'appel à System.gc(), n'y a-t-il pas un genre de méthode deallocate() ou je ne sais quoi ?
    Tu peux eventuellement ajouter une méthode finalize à tes classes qui ont des ressources qui risque de ne pas à mettre mis à null correctement.

    Sinon dans ta commande java il y a des options qui concerne la mémoire et le gcc (java -X ...)

    tu peux aussi utiliser jconsole pour detecter tes fuites mémoires.

    Mais tu ne dois pas être sans savoir que la manipulation de la video est trés gourmande en mémoire et dans le cas de quicktime comme cela à été suggeré cela risque d'être difficile à controler.

    Louis

  11. #11
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    si tu utilises Eclipse, tu peux regarder le projet TPTP...

  12. #12
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Non. Et tu ne devrais même pas à appeller System.gc() pour que la mémoire soit libérée...


    Franchement c'est difficile de t'aider sans plus de détail sur ton code...

    a++
    +1 pour System.gc(), cela ne garanti en rien que le garbage collector va être lancé.
    Et le fait de mettre les éléments à null, je suis sceptique, il suffit simplement que l'objet ne soit plus référencé ( pour parler C/C++ : plus aucun pointeur sur l'bjet ) pour qu'il soit éligible pour le GC. Enfin, un petit bemol, effectivement, il faut coder proprement pour mettre ça en place, c'est à dire pas faire comme cité plus haut : garder tous les objets dans un container.

    Maintenant si tu nous postais ton code java, on pourrait peut-être détecter les erreurs de conception.

  13. #13
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Il n'existe pas une méthode permettant de voir la consommation mémoire d'une appli Java en temps réel? Ainsi je pourrais observer quels sont les instructions clés ...

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    Citation Envoyé par muad'dib
    Il n'existe pas une méthode permettant de voir la consommation mémoire d'une appli Java en temps réel? Ainsi je pourrais observer quels sont les instructions clés ...
    Au risque de me répeter : jconsole

    http://java.sun.com/developer/techni.../jconsole.html

  15. #15
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Bon finallement je pense avoir résolu le problèmede mon application.

    Il faut, après la lecture d'un fichier via l'API QT, appeler la méthode disposeQTObject de l'objet Movie pour libérer la mémoire.

    Je ne me cherche pas d'excuses mais la documentation QT for Java est tellement bien foutue que j'ai du trouver l'astuce par moi même .....

    En tout cas merci pour vos conseils

Discussions similaires

  1. Comment récupérer la consommation mémoire de mon programme
    Par youpileouf dans le forum Threads & Processus
    Réponses: 6
    Dernier message: 11/09/2010, 19h15
  2. Réponses: 1
    Dernier message: 12/02/2010, 18h08
  3. Taille mémoire occupée par mon application
    Par b_reda31 dans le forum C++Builder
    Réponses: 0
    Dernier message: 15/05/2008, 04h07
  4. Grosse consommation de mémoire au démarrage
    Par guenievre dans le forum Java ME
    Réponses: 7
    Dernier message: 10/10/2007, 12h36
  5. Réponses: 4
    Dernier message: 09/11/2005, 14h32

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