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

Langage Java Discussion :

Conteneurs et références : gestion de la mémoire en java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut Conteneurs et références : gestion de la mémoire en java
    Bonjour,

    J'ai une map qui prends en clé un objet Obj1, et en valeur une list d'objets Obj2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Map<Obj1, List<Obj2>> map = ... ;
    Je remplis une liste d'obj2 dans une fonction, et je l'ajoute dans la map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map.put(o1, maliste)
    Si après l'ajout, je fais un maliste.clear(), est ce que ça va vider aussi le contenu de la liste dans la map ?

    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Oui, ce n'est qu'une histoire de références...

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Alos aucune collection ne fait jamais de copie ?

    Et d'ailleurs, je suis dans un scope, je déclare et je remplis une list, que je ne clear pas. Quand je sors du scope, c'est comme si un clear avait été appellé ?

    C'est quand même une connerie de n'avoir ni de destructeur, ni de delete.

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    bonjour,
    Citation Envoyé par Faiche Voir le message
    C'est quand même une connerie de n'avoir ni de destructeur, ni de delete.
    Bon, peut on savoir pourquoi ? Du moment que rien ne référence plus un objet, celui-ci est un candidat au garbage Collecting. Qu'est ce qui est con la dedans ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    bonjour,

    Bon, peut on savoir pourquoi ? Du moment que rien ne référence plus un objet, celui-ci est un candidat au garbage Collecting. Qu'est ce qui est con la dedans ?
    Ce qui est con dedans, c'est qu'on n'a aucun moyen de savoir si telle fonction ou tel objet va faire une copie de notre objet ou pointer dessus.

    Au moins, en c++ Objet, Objet& et Objet* sont des types totalement différents, et on sait immédiatement s'il y a une copie ou un pointage.

    Tu le dis très justement : si plus rien ne pointe sur la zone mémoire, c'est candidat au GC, mais comment on sait réllement que plus rien ne pointe dessus ?

  6. #6
    Membre chevronné Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Par défaut
    Si tu connais bien ton code tu sais ce que tu fais de tes objets ; et donc lorsque toutes les références à un objet dirigent vers autre chose ou ont été détruites.

    Dans la plupart des cas (si cela a été bien fait), tu sais grâce à la Javadoc si une méthode génère une copie ou travaille par référence.

    Si tu veux réellement qu'une copie d'un de tes objets soit utilisé, tu n'as qu'à la générer toi-même (c'est à ça que sert la méthode clone() qu'il est intéressant de surcharger dans une grande majorité des cas).

  7. #7
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par Faiche Voir le message
    Tu le dis très justement : si plus rien ne pointe sur la zone mémoire, c'est candidat au GC, mais comment on sait réllement que plus rien ne pointe dessus ?
    C'est pas à toi de le savoir, c'est au GC.
    Comment savoir si rien ne pointe plus sur un objet ? Je crois que tu crains surtout d'accéder à un objet qui a été détruit, ce qui donne la fameuse Read at XXXXX ? ça n'arrivera tout simplement jamais, car quand rien ne référence plus l'objet en question, et bien tu ne peux même pas essayer d'y accéder ! t'as pas une variable ou un chmp qui pointe la dessus !

    Sinon, je te ferais remarquer que la notion de Garbage collecting est là depuis des decennies et qu'elle a fait ses preuves que ce soit dans Java oiu autres langages, et que personne ne s'en plaint (enfin, presque).
    Bref, essayons de ne pas tomber dans le piège d'un milliardième troll C++ vs Java

  8. #8
    Membre éprouvé Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Citation Envoyé par Faiche Voir le message
    Tu le dis très justement : si plus rien ne pointe sur la zone mémoire, c'est candidat au GC, mais comment on sait réllement que plus rien ne pointe dessus ?
    La réponse à la question est : tu ne te poses pas la bonne question

    Qu'est ce que ça peut te faire de savoir si l'objet est encore référencé ou non, puisque ce n'est pas toi qui va décider de le détruire ?

    C'est un pas difficile à franchir, mais il faut juste déléguer complètement la gestion de la mémoire au GC et lui faire confiance. Il sait ce qu'il fait, est programmé (proprement) pour...

Discussions similaires

  1. Gestion de la mémoire en Java
    Par scratch_1 dans le forum Général Java
    Réponses: 9
    Dernier message: 06/10/2009, 15h15
  2. [Réaction] Références et Gestion de la mémoire
    Par Deadog dans le forum Contribuez
    Réponses: 3
    Dernier message: 12/08/2006, 17h06
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44

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