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 :

Détecter si on est proche du dépassement de mémoire


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut Détecter si on est proche du dépassement de mémoire
    Bonjour,

    J'ai plusieurs applications qui s’exécutent sur un PC, toutes ont le même principe de fonctionnement, elles remplissent une liste d'url puis les explorent. Mais j'ai un souci parfois c'est liste sont trop grandes (plusieurs centaines de milliers de liens) et c'est le dépassement de mémoire, je souhaite détecter si on est proche de la limite de dépassement et si c'est le cas limiter de plus en plus la taille maximum de cette pile de lien.
    Mais comment faire pour savoir si on est plus ou moins proche de la limite ?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Pourquoi ne pas fixer dès le départ une taille maximale raisonnable? Je ne vois pas de raison pour que cette valeur max acceptable côté mémoire varie fortement d'une exécution à une autre. Tu peux via les mxbean liés au gc être notifier quand le gc commence à trop bouloter il me semble. Mais c'est un peu bourrin comme technique. D'autres comme les softreference ou weakreference pourraientt être bien plus utiles.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    Pour de nombreuses raisons la taille de la mémoire disponible varie grandement sur mon PC.
    Les MXbean permettent d'éstimer l'usage de la mémoire mais ça ne donne pas la proximité avec le dépassement de mémoire, les deux autres ne servent pas à ça

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Tu veux dire que les paramètres mémoire que tu passe a java varient ou que tu as plein d'autres processus qui la bouffent?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    C'est les deux, c'est pour ça que mon espace mémoire est ératique et que je veux que les programmes s'y adaptent

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Tu ne pourra détecter que la partie 'déterminer si ton programme sature la jvm' via les mxbeans. La partir la jvm est trop grosse pour ton os n'est pas détectable. Elle s'attend à pouvoir disposer de la mémoire qui lui est allouée et c'est spécifique à l'implémentation. Si les autres processus sont trop gourmands, une solution est d'allouer toute la jvm au démarrage avec -xms

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    J'ai regardé les Mxbeans et je ne comprends pas trop quoi en faire.
    Très concrètement, la ligne suivante me donne la mémoire utilisée par mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static String getMemory()
        {
            Runtime runtime = Runtime.getRuntime();
            long taille=runtime.totalMemory() - runtime.freeMemory();
    		String tailleS;
     
    		if(taille>10000000) tailleS=((int)taille/1000000) + "Mo";
    		else if(taille>10000) tailleS=((int)taille/1000) + "Ko";
    		else tailleS=taille+"o";
     
    		return tailleS;
        }
    Je souhaiterais avoir une fonction qui me donne la mémoire disponible avant le problème Heap Space Memory.

    Ensuite je fais le ratio des deux et si c'est supérieur à 0.9, je descends la taille maximum de ma pile. Mais comment avoir la mémoire disponible avant le problème Heap Space Memory ?

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Il y a un example ici pour être notifier quand la mémoire deviens trop basse:


    https://docs.oracle.com/javase/7/doc...t/mxbeans.html

    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
    class MyListener implements javax.management.NotificationListener {
      public void handleNotification(Notification notification, Object handback)  {
        String notifType = notification.getType();
        if (notifType.equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) {
          // potential low memory, redistribute tasks to other VMs & stop receiving new tasks.
          lowMemory = true;
          notifyAnotherThread(lowMemory);
        }
      }
    }
     
    // Register MyListener with MemoryMXBean
    MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
    NotificationEmitter emitter = (NotificationEmitter) mbean;
    MyListener listener = new MyListener();
    emitter.addNotificationListener(listener, null, null);
    Le usage threshold est documenté ici http://docs.oracle.com/javase/7/docs...UsageThreshold

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

Discussions similaires

  1. Est ce que la fin du C est proche ou pas ?
    Par Nasky dans le forum C
    Réponses: 116
    Dernier message: 13/12/2016, 15h23
  2. Détecter si IE7 est installé
    Par ired dans le forum Delphi
    Réponses: 4
    Dernier message: 15/12/2006, 14h05
  3. Réponses: 3
    Dernier message: 06/03/2006, 09h59
  4. Détecter si Excel est installé
    Par zbouby dans le forum C++Builder
    Réponses: 8
    Dernier message: 08/11/2005, 16h12
  5. Qu'est-ce que "le dépassement de mémoire tampon"
    Par allex2108 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 13/09/2005, 14h33

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