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 :

2 new(s?) pour un même objet


Sujet :

Java

  1. #1
    Membre actif Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 209
    Points
    209
    Par défaut 2 new(s?) pour un même objet
    Bonjour,

    par accident j'ai créé un même objet 2 fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Classe monObjet;
    ...
    monObjet = new Classe();
    ...
    //des manipulations de monObjet
    ...
    monObjet = new Classe();
    Il s'avère que fort logiquement qu'à la recréation de monObjet il est de nouveau neuf, et que tout ce que j'ai fait avant est perdu.

    Mais (pour ma culture) qu'est devenu mon "premier" objet?
    Il a été (physiquement) écrasé par le second new qui le remplace bit pour bit ? Dans ce cas que deviennent les éventuelles objets attributs de monObjet ?
    L'objet a été recréé à côté, le premier étant devenu inaccessible, et les deux disparaitrons à la fin de la vie de monObjet?
    L'objet a été recréé à côté, le premier étant devenu inaccessible, et le "premier" disparaitra au prochain coup de Garbage Collector?
    Autre chose?


    En soit la question peut-être plus objet que java, mais avec un peu de "chance" chaque langage gère ça de manière différente.

    Question subalterne, rapport au titre : 2 new ou 2 news (qui veut quand même dire tout autre chose)?

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

    La bonne réponse est la suivante :
    Citation Envoyé par Gaillac Voir le message
    L'objet a été recréé à côté, le premier étant devenu inaccessible, et le "premier" disparaitra au prochain coup de Garbage Collector?
    Lorsque tu instancies un nouvel objet avec new, ce dernier est créé dans la mémoire "heap" alloué par le Garbage Collector.

    Tant que tu gardes une référence (variable ou attribut) vers cet objet, il restera "en vie" dans ce heap.

    Lorsque tu n'as plus aucune référence vers un objet (directement ou indirectement), alors celui-ci devient "collectable". C'est à dire qu'il pourra être "supprimé" à tout moment par le Garbage Collector pour libérer de la mémoire.



    Par contre tu n'as aucun moyen de prévoir le moment où il sera réellement "supprimé". C'est au libre choix du GC qui va tenter de faire au mieux...



    a++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Par contre tu n'as aucun moyen de prévoir le moment où il sera réellement "supprimé". C'est au libre choix du GC qui va tenter de faire au mieux...
    Il est possible d'appeler le Garbage Collector manuellement :

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Aure7780 Voir le message
    Il est possible d'appeler le Garbage Collector manuellement
    J'me demande si c'est vraiment une bonne pratique d'utiliser ça ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    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
    Citation Envoyé par Aure7780 Voir le message
    Il est possible d'appeler le Garbage Collector manuellement :
    Non seulement cela ne garantie rien, mais c'est la meilleure solution pour plomber les performances de son application !

    A éviter comme la peste !!!

    a++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Oui à éviter (pas une bonne pratique), mais ça existe...

    Le plus simple pour savoir comment fonctionne le Garbage Collector (et encore) est d'implémenter la méthode finalize() et par exemple écrire dans un fichier la date et heure.
    Tu pourras peut être savoir à quel moment il est invoqué...

  7. #7
    Membre actif Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 209
    Points
    209
    Par défaut
    Merci à tous!

    Ma curiosité est satisfaite, et je me coucherai un peu moins inculte ce soir.

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

Discussions similaires

  1. Problème pour créer des objets de la même classe
    Par Dietzer dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 25/06/2009, 17h01
  2. Comment fusionner plusieurs callback pour un même objet graphique
    Par biquet dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 19/04/2007, 10h39
  3. Réponses: 2
    Dernier message: 13/10/2006, 23h35
  4. Réponses: 15
    Dernier message: 19/06/2006, 19h25
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

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