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 :

Forcer le Garbage Collector?


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Forcer le Garbage Collector?
    Salut all,

    Ma question est simple, est t'il encore nécéssaire de forcer le passage du garbage collector pour liberer un maximum d'espace?

    je travail sur une appli ou je trouve encore beaucoup d'appel au gc théoriquement inutile vu que la JVM le fai automatiquement, mais j'ai quand même peur de tous casser en les enlevant car les traitements sont très très important.

    Quand penser vous?

  2. #2
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Points : 317
    Points
    317
    Par défaut
    oui les appel au garbage collector ne guarantissent pas que ce dernier sera executer... donc je pense que c est inutile de le faire. la jvm prendra tout en charge.

  3. #3
    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 Thomas_ats Voir le message
    Ma question est simple, est t'il encore nécéssaire de forcer le passage du garbage collector pour liberer un maximum d'espace?
    Personnellement je pense qu'appeler explicitement le GC est une erreur...

    Je te conseille vivement de lancer ton application avec l'option de la JVM -verbose:gc. Cela te permettra d'avoir des traces lors du passage du GC avec son temps d'exécution et la mémoire réellement libéré (a faire en test de préférence et pas en production !)

    Bien souvent un appel explicite au GC est lourd et ne libère pas forcément de mémoire...


    Citation Envoyé par Thomas_ats Voir le message
    je travail sur une appli ou je trouve encore beaucoup d'appel au gc théoriquement inutile vu que la JVM le fai automatiquement, mais j'ai quand même peur de tous casser en les enlevant car les traitements sont très très important.
    Avant de modifier ton programme je te conseille de le lancer avec l'option -XX:+DisableExplicitGC, ce qui indiquera à la JVM d'ignorer tout les appels explicite au GC...

    Le mieux serait de faire des tests en cumulant avec -verbose:gc et avec les mêmes données (si possible) pour voir où en est l'utilisation de la mémoire dans les deux cas...

    a++

    [edit] Je parle bien sûr de la JVM de Sun... si tu utilises une autre JVM reportes-toi à sa documentation pour voir s'il existe des paramètres similaires...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut
    Ok, merci à tous les 2 je vais voir si je peux passer les tests mais la volumétrie des données n'est pas identique sur les plateformes d'intégration et celle de prod. Donc je ne peut pas être sur à 100% de la robustesse de l'appli sans les appel au GC.

    Merci

  5. #5
    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
    Citation Envoyé par Thomas_ats Voir le message
    Ok, merci à tous les 2 je vais voir si je peux passer les tests
    Je serais bien intéressé par le verdict de ces tests

    a++

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Je suis d'accord avec ce qui a été dit précédemment. Cependant, j'ai rencontré des cas tres particuliers où l'appel au garbage collector via la méthode statique System.gc() m'aidait énormément.
    L'exemple que j'ai rencontré était un algorithme de fouille de données (recherche de motifs séquentiels pour les amateurs ) qui développait un arbre préfixé étage par étage. A chaque étape, je vidais une part de mes structures en guise d'optimisation mémoire afin de pouvoir garder en memoire de nouvelles données et j'avais besoin qu'un étage entier soit vidé de la memoire avant d'attaquer l'étage suivant. Dans cette situation, l'appel au gc était inevitable car bien qu'ayant libéré les références vers mes objets, ceux ci demeuraient toujours en mémoire.
    L'appel explicite au gc est donc à n'utiliser que dans des cas "extremes" et tres particuliers, mais il est tout de meme bon de savoir comment s'en servir au cas où. Je n'ai plus le lien sous la main, mais je me souviens avoir lu de très bon articles (sur developpez notamment) sur la politique de gestion de la memoire fait par la jvm de Sun

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Je serais bien intéressé par le verdict de ces tests

    a++
    Je vous tiens au courant dés que j'ai passé les tests, très intéréssant

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut
    Voici un exemple d'utilisation sur mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    StatCacheManager.purgeCacheIfNecessary();
    List backEndStats = StatDAO.getInstance().findStatResults( indicateur, startDate, endDate );
    Collection fsrs = FrontStatResultHelper.build( startDate, endDate, backEndStats, indicateur );
    
    System.gc();
    List result = new ArrayList( fsrs );

  9. #9
    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
    Citation Envoyé par leyee Voir le message
    Cependant, j'ai rencontré des cas tres particuliers où l'appel au garbage collector via la méthode statique System.gc() m'aidait énormément.
    A l'inverse j'ai en tête un problème d'un membre dont les performances lamentables étaient dûs en fait à des appels abusives à System.gc() : http://www.developpez.net/forums/sho...d.php?t=290077


    Citation Envoyé par leyee Voir le message
    Je n'ai plus le lien sous la main, mais je me souviens avoir lu de très bon articles (sur developpez notamment) sur la politique de gestion de la memoire fait par la jvm de Sun
    Ca ressemble à du Romain : http://gfx.developpez.com/tutoriel/java/gc/

    a++

  10. #10
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    N'oubliez quand même pas que, en plus d'être lourd quand il est effectué, la ligne System.gc() ne va pas nécéssairement lancer le garbage collector à ce moment, la jvm le lancera peut-être plus tard... En général les appels à System.gc peuvent être évités, par exemple en détruisant à la main les objets (en mettant les références à null) de telle sorte à augmenter ses chances d'un appel au gc au fur et à mesur des a suppression, mais en général il faut dans la mesure du possible éviter de créer eds programmes prenant beaucoup de place en mémoire principale, vu que c'est une ressource critique et très limitée dans un ordinateur.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

Discussions similaires

  1. Comment forcer le garbage collector dans tomcat 6-7 ?
    Par norten dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 06/02/2014, 08h56
  2. Forcer le Garbage Collector
    Par micanti dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 15/11/2013, 11h15
  3. JPanel et Garbage Collector
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 25/07/2005, 18h03
  4. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57
  5. [Language]Garbage collector
    Par GETah dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 15h18

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