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 :

[Language][GC] objet


Sujet :

Langage Java

  1. #1
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut [Language][GC] objet
    Salut
    Coment être sur qu'un objet a été ramassé par le garbage collector, sinon comment forcer la terminaison de cet objet.

    [ Modéré par Greg01 ]
    -> Modification du tag dans le titre.
    -> Merci de respecter les règles des forums Java.

  2. #2
    Membre chevronné
    Avatar de Greg01
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2002
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2002
    Messages : 297

  3. #3
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut
    pour qu'un objet soit garbage collecté, il faut qu'il ne soit plus référencé par personne!

    cela veut dire que toutes les références qui pointent vers cet objet sont mises à null (ou que tous les objets qui possèdent une référence vers cet objet ne sont eu-même plus référencés par personne)

    Le problème, c'est qu'il n'y a pas de solution pour compter le nombre de références vers un objet (le garbage collector y arrive, mais nous, on ne sait pas, si quelqu'un sait, je ne le savais pas, mais si c'est le cas, j'aimerais le savoir!!)

    Tu peux toujours overrider la methode finalize de la classe objet, qui est appelée juste avant qu'on objet soit détruit, et là, tu imprime un string du genre : je m'appel X et je suis détruit...

    Tout cela pour dire qu'en java, xi on programme très mal, il est quand même possible d'avoir des fuites de mémoire. C'est donc une bonne habitude de mettre une référence à null quand on a plus besoin d'un certain objet.

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Je rajouetrais que un objet est detruit si aucune reference existe sur ce dernier mais aussi quand la place en memoire se fait rude

    Donc meme si il n'existe plus de reference sur un objet tu peux attendre longtemps avant qu'il soit detruit ce n'est pas immédiat

    Il va attendre que la place en mémoire se fait dur comme je disais pour ensuite faire un peu de ménage

  5. #5
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    Merci de toutes ces réponses, mais mon problème est le suivant
    J'aimerais re-instancier la même classe avec des attributs complètement différents(je passe les détails), le problème est que sur la deuxième instanciation j'ai des retours de valeurs de la première fois?
    Bon je pourrais faire les choses autrement mais cela implique de revoir une partie de la conception architecture et j'avoue je suis un peu faignant.

  6. #6
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut
    Si j'ai bien compris, je dirais que Ton problème se situe plutôt au niveau du class loader...
    Mais, là, je ne suis pas sûr d'avoir compris : comment tu fais pour avoir 2 fois la même classe , mais avec des attributs différents, dans le même classpath?

  7. #7
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    Bon cette classe que j'ai besoin de mettre à jour régulièrement est une ihm dont l'aspect change(réorganisation des composants, ajout de composants ou suppression etc... la totale quoi) en fonction des données clients.
    A chaque fois que le clent à besoin de la nouvelle ihm j'aimerais que la classe qui s'occupe de cette ihm soit détruite et réinstancier avec les nouvelles données.

  8. #8
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    ton probleme reviens a recreer un objet en faisant un new.

    Cela override toutes les références a ton précédent objet.

    Sinon pour controller les références sur un objets tu peux implementer un memoizer qui seral e seul a avoir les références, et donc une simple nullification sur cet objet enverras l'objet a la casse ( enfin le declarera candidat a la collection )..

    @+

  9. #9
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    justement le new ne fonctionne que partiellement, certains attributs se retrouvant avec le même nom avec le new garde apparemment un pointeur vers ceux qui devraient être détruits.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Par défaut
    les données "conservées" ne seraient pas "static" par hasard ?

  11. #11
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    Sauf si c static, c impossible. un new detruit l'instance courante.

  12. #12
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    Non les données ne sont pas static, c'est un private ArrayList toto
    Un des boutons(jButton) de la classe réinstanciée me renvoie 2 fois l'ArrayList pour la deuxième instanciation puis 3 fois pour le troisième new et ainsi de suite.
    J'ai pensé à mettre un singleton pour être sûr que chaque nouvelle instanciation soit unique mais là je n'arrive pas à detruire la première.

  13. #13
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    tu ne passerais pas l'arrayList par copie par hasard ?

    Tu dois passer par une reference sur l'arrayList plutot, pour etre sur que c la meme instance.

    @+

  14. #14
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    Non l'ArrayList se remplie avec un DocumentListener quand des champs JTextField se remplie et tout est fait dans la classe elle même

  15. #15
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    bah alors je voispas , post nous ton code si tu veux... on regardera .

    @+

  16. #16
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut
    Tu ferme la première fenêtre pour ensuite ouvrir la seconde?
    Car sinon, tu crér peut-être un nouvel objet, mais es-tu certain que la frame possède bien une référence vers le nouvel objet, et qu'elle n'en conserve pas une vers l'ancien?

  17. #17
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    J'aimerais faire quelques remarques sur le sujet, libre à vous de les commenter biensur, je ne détiens pas le savoir absolu! 8)

    La création d'un objet par appel à new() sur une même référence ne détruit pas l'objet étant référencé auparavant. Dans l'ordre, le nouvel objet est crée et la référence pointe vers ce nouvel objet, laissant l'autre objet en mémoire mais non référencé. Il sera candidat pour le GC uniquement si il n'est plus référencé par ailleurs et si le besoin de libérer de la mémoire se ressent.

    Suite à un new() un nouvel espace mémoire est crée pour accueillir le nouvel objet. Cet espace est indépendant des autres, et il est impossible qu'il y ait "superposition" de mémoire, qui aurait pour effet par exemple de récupérer le champ String d'un autre objet. A mon avis tu dois avoir un "problème" au niveau de la création de l'objet, dans le constructeur peut-être..

    Le GC se débrouille très bien sans avoir à passer des objets explicitement à null. Ca peut même nuir aux performances du programme, car le fait d'initialiser un objet à null est déjà une opération qui place l'objet dans un état "d'utilisation". Plutôt, pour optimiser les performances mémoire, il faut avoir une bonne notion de la portée des objets qu'on utilise, une bonne utilisation des attributs privates et publics ainsi que des constantes déclarées en final. Une bonne analyse à ce niveau là est la seule technique viable pour améliorer la performance mémoire de vos applications Java.

    Il y a un système de cache il me semble sur les IHM. Il faut explicitement rappeller le rafraichissement pour que les données soient mises à jour avec les vraies valeurs, consulter l'API pour cette information, je ne l'ai pas sous le coude désolé.

    K

    PS : je n'avais pas remarqué que ce poste datait de 2003

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

Discussions similaires

  1. [Language][Compilateur]Objets et structures conditionnelles
    Par goran kajfes dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2005, 22h55
  2. Réponses: 3
    Dernier message: 17/11/2005, 09h35
  3. [Language][Objets en Paramètres]Performances?
    Par Regis.C dans le forum Langage
    Réponses: 4
    Dernier message: 11/09/2005, 13h16
  4. [Language][Package]Probleme de portée d'un Objet
    Par julien.v dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2005, 14h23
  5. [Language]Type d'un objet null
    Par Calambo dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2005, 10h06

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