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 :

Garbage Collector/libération objets référencés


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 477
    Par défaut Garbage Collector/libération objets référencés
    Bonjour à tous,

    Ma question porte sur le fonctionnement du GC, dans le cas de références de "plusieurs niveaux". J'ai lu le tutoriel sur le GC, mais je n'ai pas trouvé de réponse à cet aspect précis.
    Je m'explique :
    Un objet A est contenu dans un objet B, lui même contenu dans un objet C, etc jusqu'à Z

    A<-B<-c<-.....<-Z

    Le progremme execute :
    Z=null;

    L'objet Z est donc potentiellement nettoyable par le GC. Mais Concernant les objets A, B, C, D...Y?
    - Sont'ils déréférencés immédiatements (donc supprimables immédiatement) dans le même temps que l'objet Z.
    ou
    - une fois l'objet Z supprimé, l'objet Y devient lui même candidat à la suppression, puis l'objet X, W, etc? La suppression totale des fis et sous fils prendrait donc plusieurs itérations?
    ou :
    - .....?

    Merci pour vos réponses

  2. #2
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut Reference <> GC
    non en fait "l'objet Z" n'est qu'une référence à l'objet créé, comme A, B, C, ... alors tu ne perds pas l'objet lorsque que tu supprimes la référence Z. Si tu lances le debuggeur tu remarqueras que l'adresse mémoire de Z avant de la supprimer est la même que les autres références.
    Du coup le GC ne touchera pas l'objet en mémoire 0Xetc. avant de n'avoir plus de lien vers cette adresse mémoire, i.e. A, B, C, .. Z déréférencés.
    si tu veux accélérer le GC, il faut utiliser des References objet pures telles que SoftReference ou PhantomReference ou encore WeakReference. ainsi quand tu supprimeras la référence Z = objet les References pures Soft Weak ou Phantom disparaîtront immédiatement de la mémoire Java, plus rapidement qu'en temps normal, car elle sont instanciées avec une liste ReferenceQueue qui gère cela.
    tu pourrais avoir A = SOftReference(Z, refQueue) B = WeakReference(Z, refQueue) Z = new Object(); puis Z = null -> libération instantanée des resources de new Object()

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par LeSmurf
    Un objet A est contenu dans un objet B, lui même contenu dans un objet C, etc jusqu'à Z

    A<-B<-c<-.....<-Z

    Le progremme execute :
    Z=null;
    Pour moi, lorsque le GC va passer pour détecter les objets "déréférencés", il va regarder pour chacun si est connecté au "graphe des références" (je ne sais pas comment ça s'appelle). Et là, en l'occurrence, le fait de faire z = null déconnecte toutes tes variables du graphe de référence, donc je pense que Z n'est pas forcément supprimé avant Y, ni avant X...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 477
    Par défaut
    => broumbroum : Je ne maîtrise pas ces aspects liés aux références, mais ton explication pourrait m'aider à résoudre un problème...

    => ®om : Tout est donc désalloué lors d'un même passage. Merci pour "graphe des références". Grace à cette expression, je comprend tout de suite mieux le mécanisme

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/03/2011, 23h41
  2. Libération d'un objet pour le Garbage Collector
    Par soso78 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 28/06/2010, 10h31
  3. Le nombre d'objet à collecter par le garbage collector
    Par TaymouWan dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/12/2009, 17h41
  4. Réponses: 9
    Dernier message: 06/05/2008, 17h10
  5. [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

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