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

Collection et Stream Java Discussion :

Libérer la mémoire aprés utilisation de collection


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut Libérer la mémoire aprés utilisation de collection
    Bonjour,

    j'ai conçu un programme incluant un GUI qui contient beaucoup de collection(environ une 20 list, 10 vecteur)

    1 - est ce énorme pour un programme ? je ne risque pas d'avoir des problemes de reddource ?

    2 - dans les cas suivant est ce que la mémoire est libérée automatiquement :
    - liste1.add(list2)
    return list1 la mémoire de list2 est t elle libéree

    - list à l'intérieur d'une boucle for
    - list non retourné
    3 - Si ce n'est pas fait automatiquement, comment faire ?

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Bonjour

    1) Ca dépend de la taille de tes listes, et de ce quelles contiennent (références d'objets, chaines, doubles, ...)

    2) La mémoire consommée par list2 ne sera pas libérée tant qu'elle sera référencée (dans ton exemple, tant que list1 "existe")

    3) Si ce n'est pas fait automatiquement, c'est qu'il y a une raison (référence encore valide, donc le garbage collector considère que l'objet n'est pas à détruire).

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    Autrement dit si j'ai bien compris je n'ai pas à libérer la mémoire manuellement ?

    Existe t-il une manière de l'afficher (la mémoire )?

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Citation Envoyé par harris_macken Voir le message
    Autrement dit si j'ai bien compris je n'ai pas à libérer la mémoire manuellement ?
    Oui, en java il faut se préoccuper de ce que les objets ne soient plus utilisables, ou atteignables, ou désignables, et la mémoire devient automatiquement disponible pour d'autres objets.

    Citation Envoyé par harris_macken Voir le message
    Existe t-il une manière de l'afficher (la mémoire )?
    Par exemple Runtime.freeMemory.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par harris_macken Voir le message
    Existe t-il une manière de l'afficher (la mémoire )?
    Tu peux aussi utiliser JConsole fournit avec la JVM ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  6. #6
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par harris_macken Voir le message
    Autrement dit si j'ai bien compris je n'ai pas à libérer la mémoire manuellement ?

    Existe t-il une manière de l'afficher (la mémoire )?
    Tu peux forcer la JVM a libérer les objets non référencés en appellant le Garbage Collector :

    Mais ceci est normalement fait automatiquement

    F.
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  7. #7
    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 mavina Voir le message
    Tu peux forcer la JVM a libérer les objets non référencés en appellant le Garbage Collector :

    Perso je déconseille fortement cela, surtout que le comportement est indéterminé : la JVM peut ignorer ces appels ou bien appeler un FullGC très consommateur en temps CPU.

    En conséquence cela peut avoir des comportements très différents et cela peut provoquer d'énorme différence sur deux machines différentes (un exemple : Difference de performances Unix/Windows d'un programme?).


    Le GC se débrouille parfaitement pour libérer la mémoire, et l'appel à System.gc() ne devrait être réservé qu'a des cas bien spécifique et après plusieurs test. Perso je te conseillerais plutôt de bien vérifier la portée de tes variables et de les limiter au minimum requis

    a++


    PS : A noter qu'avec la JVM de Sun on peut utiliser l'option -XX:+DisableExplicitGC pour ignorer tout les appels explicite au GC.

  8. #8
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    merci de tes réponses

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

Discussions similaires

  1. SetLength: libérer la mémoire après usage
    Par j.p.mignot dans le forum Langage
    Réponses: 9
    Dernier message: 10/01/2011, 05h58
  2. Réponses: 4
    Dernier message: 20/09/2010, 11h05
  3. Libérer la mémoire non utilisée
    Par Iron Bull dans le forum Général Java
    Réponses: 8
    Dernier message: 20/07/2009, 16h52
  4. [dll] libérer une dll apres utilisation
    Par polo54 dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 11/07/2009, 22h48
  5. Vider la mémoire après utilisation d'une feuille excel
    Par snooopy007 dans le forum Access
    Réponses: 15
    Dernier message: 19/07/2006, 20h11

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