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 :

Eligible au Garbage Collector


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Eligible au Garbage Collector
    Bonjour, une petit code et une question simple

    t est-il éligible au gerbage collector ???

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    package test_suite;
     
    class S {
     
    	T t ;
    	public S(){
    		t = new T();
    	}
    }
     
    class T {
     
    }
     
    public class Q139 {
    	public static void main(String[] args) {
     
    		S s = new S();
    		s = null;
    	}
    }

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    Tout est éligible au GC du moment qu'on ne s'en sert plus.
    Une fois que ton instance de "S" sera inutile, "t" le deviendra aussi et sera éligible.

    Mathieu

    PS: J'aime bien le "gErbage colllector"

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    OK mais une fois s = null;

    t devient éligible au garbage collector ???

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    C'est plus subtile que ça. Même si tu ne mets pas ta variable à null, elle sera éligible au GC. De manière générale, quand tu codes en Java, tu n'as pas besoin de te soucier du GC. Java nettoie très bien la mémoire depuis la version 1.4 sans que le développeur n'ait besoin de faire d'effort particulier. (genre casser les références cycliques...)

    Mathieu

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Moi je demande çà par ce que j'ai besoin de savoir QUAND ???

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Baisse le ton.

    Ça n'a pas de sens, j'ai "besoin de savoir quand." Tout dépend précisément quelle est la problématique qui t'intéresse. Évaluer le moment d'une éligibilité en fonction de quelques lignes de code, n'est pas une problématique.

    On peut par exemple chercher à savoir quand on pourra compter sur le fait qu'un objet est effacé de la mémoire (réponse : ça dépend des OS, mais en tout cas pas avant que le processus Java ne soit terminé.) Ou d'autres choses. Des vraies motivation d'analyse.

    Sur le plan purement théorique, t est éligible au garbage-collector dès que l'instance qui le contient l'est (la première valeur de S.) Et elle l'est juste après l'appel à new S(), puisqu'elle n'est pas utilisée ensuite.

    Sur le plan simpliste, accessible aux débutants, pareil : t est éligible au garbage-collector dès que l'instance qui le contient l'est. Et cette instance l'est dès que plus rien ne pointe vers elle, donc que s ne pointe plus vers elle puisqu'il pointe vers null.

    Toutefois, dans les deux cas, ça ne servait à rien de faire s = null;. En théorie ce qui compte c'est que plus rien ne l'utilise, et c'est le cas dès la fin de son constructeur. En plus simple ce qui compte, c'est que plus rien ne pointe vers elle, ce qui arrive de toute façon quand la portée de s se termine.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Bonjour Thelvin
    OK ce n'est pas très réaliste mais c'est une question pour la certification ...

    je réponds à ce que on me demande

    Ce n'est pas moi hélas qui fait les questions ...

    Merci pour ta réponse complète

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je m'en doutais, mais on est pas là pour faire tes devoirs, tu sais.

    Si c'est pour la certif, il faut le dire et demander comment ça marche. Et on t'aurait donné des éléments de réponse, le contexte étant simple, les réponses aussi.
    Pas "c'est quoi la réponse à cette question ?"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Mon cher Thelvin
    Vous devenez très autoritaire ... même si à mon Age (53) , je n'ai pas honte de

    me faire aider pour faire mes devoirs !!!

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Désolé, c'est les règles.

    De toute façon je pense pas que se faire faire son travail devienne plus efficace avec l'âge. Soit on devient capable de faire, soit non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Bonne soirée quand meme , jeune grincheux ...

  12. #12
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Il fallait me mettre les propositions du QCM, j'aurais coché une réponse
    Bon courage à toi pour ta préparation de la certification.

    Mathieu

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pour répondre à ta question, la réponse est "quand le jvm constate qu'elle n'en a plus besoin". D'une manière générale, une instance deviens collectable si il n'y a plus aucun chemin de hard reference partant d'un objet non collectable vers cette instance.

    La manière dont le garbage collector fait ces calculs n'est pas précisé dans la spec et laissé libre à tout implémentation de la jvm.

  14. #14
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par Influenza Voir le message
    De manière générale, quand tu codes en Java, tu n'as pas besoin de te soucier du GC.
    Et de manière particulière, notamment en codage d'interface graphiques, ce genre ce mauvais comportement, que des années de lobotomie "y a un GC, ont generalise et font que la plupart des gens pense qu'il n'y a pas besoin de liberer le refs ou de faire le nettoyage" ne peut au final que mener vers des OutOfMemoryError ou des programmes qui pour tourner on besoin de flags du genre -Xmx800m ou des choses du genre.

    Effectivement, plus personne ne prend le temps d'aller desenregistrer ses listeners et autres callbacks une fois qu'on plus besoin d'avoir un écran a portée de main ; déjà avec Swing c’était pas mal au niveau passage et conservation de références, mais avec FX c'est pire.
    A voir la discussion "How to deal with Memory Leaks, that are caused by Binding" avec notamment plusieurs interventions de membres de l’équipe de JavaFX dont Richard Bair, le Lead Architect.

    D'ailleurs, je ne me suis pas encore penché sur le cas du JDK8 et de ses lambdas qui permettent de passer... des références de methodes ce qui devrait, en théorie, encore augmenter le nombre de références "cachées" (auxquelles le programmeur ne pense pas a priori) vers un objet.

    Et il y a également des fuites mémoires ou non-optimisations dans les implémentations de base des collections. Ce n'est pas pour rien que la session a laquelle il m'a été donné de participer et qui avait le plus de spectateurs (beaucoup de gens qui n'avaient pas booké la session ont été obligés de rester en dehors de la salle) lors de la JavaOne 2012 était :

    From Java code to Java heap: Understanding and optimizing your appl...

    Citation Envoyé par Influenza Voir le message
    Java nettoie très bien la mémoire depuis la version 1.4 sans que le développeur n'ait besoin de faire d'effort particulier.
    I beg to differ...
    C'est un peu mieux avec le G1 et le JDK8 mais ce n'est toujours pas assez performant (coté client et même avec un flag -server). Une analyse de mes programmes avec jmap montre que les objets sont conservés en mémoire bien plus longtemps que prévu et ce même quand mon propre code n'a plus aucune référence dessus. Le pire c'est que jconsole permet effectivement de réclamer la mémoire assez efficacement sur un programme qui tourne. Bref, vivement la self-tunning JVM promise pour Java 9 et en retard puisque sans arrêt repoussée.
    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

  15. #15
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    J'avais effectivement mis "en général" pour simplifier le débat, mais il est vrai qu'il y a des problèmes de "memory leak" en Java qu'il faut traiter. Cependant, pour avoir connu Java 1.2 et 1.3 où un simple objet A qui référence un objet B et B qui référence A ne pouvaient être détruits, la JVM a fait depuis d'énormes progrès...
    Après la JVM rend la mémoire quand elle veut. Même les objets qui devraient être détruits, la JVM ne les enlèvera que si elle le juge nécessaire...

    Mathieu

    PS : La présentation ne fonctionne pas chez moi, mais m'intéresse fortement.

  16. #16
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Malheureusement le site de développez fait une intégration automatique de l'URL de la présentation dans le topic mais tu peux aller sur le site d'origine en cliquant sur son titre dans le cadre.

    La version 2013 (je n'ai pas été à la JavaOne 2013) est :

    http://fr.slideshare.net/cnbailey/memory-efficient-java

    Normalement les sites des JavaOne 2012 et 2013 devraient avoir les enregistrement audio synchronisés sur la présentation.
    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

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par bouye Voir le message
    Malheureusement le site de développez fait une intégration automatique de l'URL de la présentation dans le topic
    http://www.slideshare.net/cnbailey/j...e-to-java-heap

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

Discussions similaires

  1. [JVM] Java 5 et Garbage Collector(Parralèle)
    Par ssaunois dans le forum Général Java
    Réponses: 6
    Dernier message: 28/11/2005, 23h42
  2. [JVM]Garbage collector
    Par godik dans le forum Général Java
    Réponses: 5
    Dernier message: 07/10/2005, 09h12
  3. JPanel et Garbage Collector
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 25/07/2005, 18h03
  4. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57
  5. [Language]Garbage collector
    Par GETah dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 15h18

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