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 :

Suppression automatique dans les collections à la suppression de l'objet?


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Suppression automatique dans les collections à la suppression de l'objet?
    Bonjour,

    question bête :

    Si on ajoute un objet dans une collection, puis si on le supprime en faisant objet.finalize(); cela le supprime-t-il aussi de la collection?

    Merci

  2. #2
    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
    Non.

    La méthode finalize ne sert à rien, qu'à embrouiller le bon peuple des programmeurs et des programmeuses.
    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é.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Ah bon? Donc pour vraiment détruire un objet comment tu fais?

  4. #4
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Tu fais rien.

    Si les objets de la collection ne sont réellement plus utilisés (plus référencés) ils seront détruits automatiquement.

  5. #5
    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
    Oui, par rapport à ta collection il suffit de faire collec.remove(tonObjet), et si cet objet n'est référencé nulle part ailleurs, alors le ramasse miette le nettoiera de la mémoire à l'occasion.
    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é.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ceci dit, la méthode finalize n'est pas totalement injustifiée.
    Si l'objet contient des références sur des fichiers (par exemple), cette méthode permettra de libérer les ressources.
    Sinon, pour le reste, c'est tout à fait ça, tu ne maîtrises pas la mémoire utilisée par un objet, ni le moment où elle sera libérée une fois éligible au Garbage Collector. Le fait de l'appeler (System.gc() n'y change pas grand chose d'ailleurs...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Ben merci

  8. #8
    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
    Pour compléter sur finalize, depuis l'arrivée des WeakReference, sa nécessité d'usage se réduit aux cas tordus.

    Par exemple pour les fichiers, en quoi est-ce nécessaire d'utiliser cette méthode ? close() ne suffit pas ? Ou dans la conception d'une classe qui contient en interne des ressources à libérer, on ne peut pas créer une méthode style dispose(), que l'on demande d'appeler explicitement, comme on le fait pour Frame, Graphics, et tant d'autres choses ?

    Des explications plus complètes à How to Handle Java Finalization's Memory-Retention Issues.
    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é.

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par Tommy31
    Si les objets de la collection ne sont réellement plus utilisés (plus référencés) ils seront détruits automatiquement
    Question bête : si l'objet est toujours présent dans une Collection, il y est donc référencé, non ?
    Donc le GC ne le supprimera pas de la mémoire. Si ?

  10. #10
    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
    Oui, non.
    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é.

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par gifffftane
    Oui, non.
    Heu, donc j'ai bon ??
    si l'object est toujours dans la Collection, il y est référencé, donc il ne sera pas supprimé par le GC.

    D'où la nécessité de faire le collec.remove(obj), en le mettant, à la limite, dans le finalize()....

  12. #12
    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 marchand_de_sable Voir le message
    Heu, donc j'ai bon ??
    si l'object est toujours dans la Collection, il y est référencé, donc il ne sera pas supprimé par le GC.
    Oui c'est exactement ca : un objet ne peut être libéré par le GC qu'à partir du moment où il n'est plus référencé nulle part (en tout cas pour les références "fortes" - il y a des cas particulier avec les autres types de référence : http://blog.developpez.com/adiguba?t...rences_en_java)

    Citation Envoyé par marchand_de_sable Voir le message
    D'où la nécessité de faire le collec.remove(obj), en le mettant, à la limite, dans le finalize()....
    NON pas dans le finalize() !
    finalize() ne doit pas être appelé explicitement. Cette méthode est appelé par le GC une fois qu'il a décidé que l'objet pouvait être libéré. Tu n'as pas à l'appeler directement !
    Donc si tu rentres dans finalize() cela veut dire que ton objet a déjà été supprimé de la collection...

    De plus je ne trouve pas que ce soit très correct que ce soit l'objet lui-même qui s'enlève de la collection


    finalize() n'a pas à être utilisée pour gérer la mémoire : c'est le rôle du GC.
    finalize() est conçu pour libérer les ressources externes non gérées par le GC !

    Citation Envoyé par gifffftane Voir le message
    Par exemple pour les fichiers, en quoi est-ce nécessaire d'utiliser cette méthode ? close() ne suffit pas ?
    close() (ou une méthode de libération) est amplement suffisant dans tous les cas, mais finalize() est un garde-fou au cas où close() ne serait pas appelée... ceci afin d'éviter de conserver la ressource infiniment (en particulier sur une application serveur).



    a++

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2007, 10h08
  2. Réponses: 1
    Dernier message: 08/05/2007, 23h15
  3. Réponses: 11
    Dernier message: 19/09/2006, 09h34
  4. [HTML] Supprimer la saisie semi automatique dans les balises TEXT
    Par mego dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 25/07/2006, 16h30
  5. Retour à la ligne automatique dans les div
    Par Delphy113 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/02/2006, 10h42

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