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

Java Discussion :

[System] Récupération de la taille mémoire de son programme


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut [System] Récupération de la taille mémoire de son programme
    Bonjour, bonsoir
    Je suis dans une phase de tests, et j'aimerai pouvoir récuperer la taille mémoire utilisée par mon programme java à un moment X. Tout ça en java bien entendu.

    Merci d'avance pour vos réponses

  2. #2
    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
    Dans la classe java.lang.Runtime, tu dispose de quelques fonctions sur la mémoire ... regarde si tu y trouve ton bonheur

  3. #3
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    J'avais deja essayé, mais ca me sort des chiffres incohérents.

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 815
    Points : 7 644
    Points
    7 644
    Par défaut
    Citation Envoyé par splend_f
    J'avais deja essayé, mais ca me sort des chiffres incohérents.
    Incohérent dans quel style?

  5. #5
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Mémoire totale : 7.016448Mo.
    Mémoire disponible : 1.730832Mo. (
    Mémoire maximum utilisable : 266.40384Mo.
    Mémoire max est correcte je lance mon appli avec 256Mo (-Xmx256M)
    Mais à l'instant où ces données sont collectées mon n'appli utilise 118Mo de mémoire (Je sais ça via un top sur mon terminal).
    Donc pour moi la mémoire disponible correspondrait à genre 256 - 118 ou un truc dans le genre.

    j'affiche mes données de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          System.out.print("Mémoire totale : ");
          System.out.print(Runtime.getRuntime().totalMemory() / 1000000d);
          System.out.println("Mo.");
          System.out.print("Mémoire disponible : ");
          System.out.print(Runtime.getRuntime().freeMemory() / 1000000d);
          System.out.println("Mo.");
          System.out.print("Mémoire maximum utilisable : ");
          System.out.print(Runtime.getRuntime().maxMemory() / 1000000d);
          System.out.println("Mo.");

  6. #6
    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
    euu .. si tu commençait par valuer ta mémoire en puissance de 2, ça serait mieux nan ? (C pas ça le problème, mais ça serait 1 bon début ...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.out.print("Mémoire totale : "); 
          System.out.print(Runtime.getRuntime().totalMemory() / (1024*1024)d); 
          System.out.println("Mo."); 
          System.out.print("Mémoire disponible : "); 
          System.out.print(Runtime.getRuntime().freeMemory() / (1024*1024)d); 
          System.out.println("Mo."); 
          System.out.print("Mémoire maximum utilisable : "); 
          System.out.print(Runtime.getRuntime().maxMemory() / (1024*1024)d); 
          System.out.println("Mo.");
    et puis 118Mo pr 1 appli, C vraiment ... beaucoup .. pour pas dire énorme.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Enorme c'est normal je fais des traitements sur des bases monstreuses. Plus de 10 000 000 d'attributs. Et encore le code est ultra optimisé

    Citation Envoyé par NeptuS
    euu .. si tu commençait par valuer ta mémoire en puissance de 2, ça serait mieux nan ? (C pas ça le problème, mais ça serait 1 bon début ...) :
    Je sais bien, ct juste pour donner un ordre d'idée et montrer que ça ne pouvait correspondre aux résultats souhaités

  8. #8
    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
    mmm ... optimisé dis-tu ... et tu charges ta base en mémoire ? ... moi je n'appelle pas ça de l'optimisation ^^.
    à moins que j'ai mal compris ...

  9. #9
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Bha disons que l'on est obligé de conserver certains paramètres pour faire des calculs de supports. Et forcement c'est très couteux en mémoire, mais là on n'a pas le choix

  10. #10
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 815
    Points : 7 644
    Points
    7 644
    Par défaut
    Apparemment, il y aurait quelques petites "incohérences" entre les valeur donnés par le Runtime Java, et par top. Voir ce lien pour de plus amples infos: http://www.jguru.com/faq/view.jsp?EID=478232

  11. #11
    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
    mouai ... 10.10^6 paramètes en mémoire ... C trop ... même pour des calculs .. alors soit tu les stocke sur disque (ficher) et dans ce cas je dis ok : les accès disques sont très lents et ça peut valoir le coup, ou alors ils sont bien gentiement à leur place dans 1 BD et là je dis que t'as joué au con : les sgbd sont tellements puissants aujourd'hui qu'on a plus intérêt à se fier à eux qu'à ses propres algos.

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Si c'était possible. Je vais t'éclairer sur le sujet, par un exemple ça sera plus simple.
    ex:
    Carrefour a besoin de connaitre quels sont les articles (ensemble d'articles) qui sont régulièrement achetés ensemble. Pour cela ils te fournissent l'ensemble des tickets d'un de leur magasin sur une année (déjà imagine la taille des données). Après il faut rechercher les ensembles d'articles en fonction d'un support donné (un pourcentage), par ex tous les articles qui figurent dans au moins 0.01% des caddies. Et plus tu descends ce support plus tu obtiens des données énormes à traiter et plus ça met du temps. Car si carrouf veut ses données sur l'année 2005, faut pas lui fournir les résultats en 2008.

    Maintenant, si tu connais un sgbd capable de faire ça...

    Donc si tu veux approfondir le sujet, tu peux regarder ici :
    http://himalaya-tools.sourceforge.net/Mafia/

  13. #13
    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 NeptuS
    mmm ... optimisé dis-tu ... et tu charges ta base en mémoire ? ... moi je n'appelle pas ça de l'optimisation ^^.
    L'optimisation peut prendre des formes totalement différentes selon tes besoins...
    • Tu peux optimiser la mémoire utilisée, en ne conservant que le strict minimum...
    • Tu peux optimiser les temps d'exécutions, en créant des caches qui éviteront de faire des acces aux données à chaque fois...


    Il n'y a pas une bonne et une mauvaise solution : cela dépend de ton application et de tes besoins...


    Si optimiser la consommation mémoire nuit au performance ce n'est pas forcément une bonne solution... Pour moi 256Mo de mémoire ce n'est pas grand chose pour une machine serveur ou un calculateur... Maintenant c'est vrai que pour une application cliente cela commence à faire beaucoup...



    Pour en revenir au problème initial, si tu es sous Java 5.0 tu peux regarder du coté de l'API de Management et à la classe MemoryMXBean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
    a++

  14. #14
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    J'avais oublié de dire merci
    Ca marche niquel les MemoryMXBean. Merci encore (et honte à moi )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération des données et taille mémoire
    Par sebastien.bordat dans le forum Langage
    Réponses: 6
    Dernier message: 10/07/2013, 17h54
  2. Connaitre la taille en mémoire de son application C
    Par Aspic dans le forum Débuter
    Réponses: 7
    Dernier message: 23/03/2009, 23h46
  3. Récupération de la taille d'une cellule
    Par Philofish dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/08/2005, 15h14
  4. Réponses: 3
    Dernier message: 28/06/2005, 09h07
  5. [JVM] Connaitre la taille mémoire utilisé par les dif classe
    Par sur_uix dans le forum Général Java
    Réponses: 4
    Dernier message: 18/09/2003, 09h17

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