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 :

Destruction d'un objet


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut Destruction d'un objet
    Bonsoir a tous,

    Je developpe une application de gestion de rendez-vous, pour en annuler un faut supprimer un objet rendez-vous.
    Je suppose que ce probleme est assez simple pour beaucoup d'entre vous, pourriez vous me dire comment detruire un objet svp. vos conseils sont les bienvenus.

    Merci.

  2. #2
    Membre expérimenté Avatar de erictoguem
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut En java, la gestion de la mémoire est effectuée par la machine virtuelle
    En java, la gestion de la mémoire est effectuée par la machine virtuelle donc tu ne peux détruire un objet mais le rendre elligible et demander à la machine virtuelle si elle veut bien le détruire.
    Pour le rendre élligible, tu n'as qu'a oter toute reférence vers cet objet par exemple en mettant nul sur les réferences pointant sur lui,
    pour demander à la machine virtuelle si elle veut bien le détruire tu n'as qu'a faire cet appel System.gc()

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Je plussoie erictoguem. Mais je doute que ce soit réellement la destruction en mémoire vive de ton instance de rendez-vous qui t'intéresse réellement.
    Toi, ce que tu veux probablement faire, c'est le supprimer de l'endroit où les rendez-vous sont stockés pour qu'il ne soit plus pris en compte.

    Au niveau du code, j'imagine que tu tiens à jour quelque part dans ton code une collection (liste ?) de tes rendez-vous. C'est logiquement sur cette collection qu'il faudra appeler la fonction 'remove' pour supprimer le rendez-vous.
    Après, tout dépend du contenu exact de ton code.

  4. #4
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut
    Donc si j'ai bien compris, pour supprimer un objet se trouvant dans une liste on fait remove et dans le cas general on affecte nul aux objets pouvant faire une reference a celui ci puis on appel System.gc(), je ne connassais pas ces techniques, merci a vous.
    Et concernant la syntaxe de System.gc, est ce que l'on appel de cette maniere: System.gc(objet) ou autrement ?

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Cet appel doit de toute maniere etre evite et il n'y a pas garantie que le garbage collector se lance immediatement pendant ni apres ni qu'il se lance tout court. Le mieux reste de nullifier les references inutiles et de faire des dispose() ou des close() sur les objets qui necessitent de liberer des ressources natives (contextes graphiques et flux par exemple).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Par défaut
    Citation Envoyé par Pathfinder_888 Voir le message
    Je suppose que ce probleme est assez simple pour beaucoup d'entre vous, pourriez vous me dire comment detruire un objet svp. vos conseils sont les bienvenus.
    C'est un objet persistant ?

    Si c'est le cas, comme indiqué, il faudrait que tu nous indiques où sont stockés tes données, sinon, c'est impossible de le dire.

  7. #7
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par erictoguem Voir le message
    pour demander à la machine virtuelle si elle veut bien le détruire tu n'as qu'a faire cet appel System.gc()
    Citation Envoyé par Pathfinder_888 Voir le message
    puis on appel System.gc(), je ne connassais pas ces techniques, merci a vous.
    Non !!!!!!!!!!!!!!!!

    Evitez d'appeler System.gc() : c'est contre productif et potentiellement très pénalisant !

    Citation Envoyé par bouye Voir le message
    Cet appel doit de toute maniere etre evite et il n'y a pas garantie que le garbage collector se lance immediatement pendant ni apres ni qu'il se lance tout court. Le mieux reste de nullifier les references inutiles et de faire des dispose() ou des close() sur les objets qui necessitent de liberer des ressources natives (contextes graphiques et flux par exemple).
    +1


    On distingue deux cas :
    • Les objets "pure Java", qui sont totalement géré par le GC. Il suffit de ne plus avoir de références vers ces objets pour qu'ils soient libérable par le GC. Le moment exact a peu d'importance...
    • Les objets représentant une ressource externe (flux vers un fichier, socket, connection BD, etc.), qui ne peut pas être géré par le GC (qui ne s'occupe que de la mémoire). Dans ce cas là il faut utiliser un bloc try/finally et appeler la méthode de libération de la ressource explicitement (FAQ : Comment libérer proprement les ressources (ou comment utiliser proprement les bloc try/finally) ?)




    Mais il ne faut pas appeler System.gc() :
    • Au mieux ce sera complètement ignoré par la JVM, et cela ne fera rien.
    • Au pire ca effectuera une opération de full-GC, fortement couteuse et potentiellement inutile ! Ce qui réduit à néant tout les avantages du GC !


    Sur le forum il y a plein d'exemple de problème de perf à cause d'appel à System.gc(), par exemple :
    Citation Envoyé par julien20vt Voir le message
    Donc, dans mon code il y avait une ligne (dans chaque bas de page) qui faisait un System.gc();... et c'est cela qui produisait de la charge.
    Une fois cette ligne supprimée, je retombe à une utilisation équivalente de chaque processeur de l'ordre de 2% !!!
    a++

  8. #8
    Membre actif
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Par défaut
    > Je developpe une application de gestion de rendez-vous, pour en annuler un faut supprimer un objet rendez-vous.

    Bonjour,
    Je suppose que tes rendez vous sont stocké quelque part... Dans une base de donnée? Dans un fichier simple ?

    Comment fais tu pour créer un nouveau rendez vous ? Si tu fais simplement un new RendezVous(), ton objet sera supprimé au prochain redémarage de ton application...

    Réponds à ces questions, et nous pourrons peut être t'aider...

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/10/2007, 01h55
  2. [C#] destruction d'un objet
    Par legillou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/06/2006, 11h19
  3. destruction d'un objet
    Par akrobat dans le forum C++
    Réponses: 46
    Dernier message: 14/05/2006, 20h32
  4. Réponses: 1
    Dernier message: 09/07/2005, 18h16
  5. Réponses: 14
    Dernier message: 02/03/2005, 18h15

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