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

avec Java Discussion :

[Debutant] Gc et Finalize


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 173
    Par défaut [Debutant] Gc et Finalize
    Hello world ! (c'est jamais facile le mercredi...)

    Voila dans le cadre d'un exo de java, je dois supprimer un objet qui est dans une arraylist, et ensuite "passer" le garbage collector, or je sais très bien que celui-ci passe quand il veut...

    Voici mon code pour l'override de Finalize();:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
    	public void finalize()
    	{
     
    		try {
    			super.finalize();
    			nbPersonnages--;
     
    		} catch (Throwable e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    et celui du main pour effacer un objet de ma ArrayList:
    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
    23
    24
    25
    26
    27
    28
    29
    for(int i=0; i<player.size();i++)
    			{
    				if(player.get(i).getNickName().equals("Homer"))
    					{
     
    					player.remove(i);
    					System.out.println("Le joueur index "+ i +" du nom de: Homer a ete efface" +"\n"+ player);
    					System.gc();
    					};
     
    			}/*
    			 Iterator<Player> iterator = player.iterator();
    			 while ( iterator.hasNext() ) {
    			     Object o = iterator.next();
    			     Player p = (Player)o;
     
     
    			     if(p.getNickName() == "Homer")
    			      {
     
    			         iterator.remove();
    			    	 System.out.println("J'ai trouve Homer");
     
    			     }
    			 }*
                            System.gc();
    			System.out.println("nombre de joueurs: "+ Player.getNbJoueur());
    			System.out.println("liste ordonnée des employés:\n"+ Collections.sort(player));
    			/
    Je dis bien que c'est dans le cadre de l'exercice que je dois passer le gc, car en soit... mais bon j'aimerais bien comprendre, en cherchant j'ai appris que le gabage collector, répertoriait les objet à partir du moment où il n'y avait plus aucune référence à ceux ci....
    Donc si je supprime l'objet de la liste il n'existe plus aucune manière d'y accéder, si ?

    Bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Le GC passe quand il veut ou meme jamais car tu peux ne pas avoir de GC dans ta VM.

    En plus tu peux oublier la méthode finalize(), elle est en effet deprecated depuis le JDK 9.

    Tu veux supprimer un objet : tu le retires de ta liste et tu vérifies que tu n'as pas conservé une ou plusieurs autre références ici et la. Si tu veux "détruire" un objet pour relâcher des ressources natives, réseau, BD ou autre connections web : tu lui ajoutes une méthode destroy() ou close() pour faire ce genre ce boulot et une fois que tu l'a retiré de ta liste et que tu es sur et certain que personne d'autre ne l'utilise tu invoque cette méthode a mano.

    A noter qu’implémenter l'interface AutoClosable permet d'utiliser n'importe quel objet avec un bloc try-with-resource ce qui permet sa destruction (destruction / suppression = l'invocation de sa méthode close(), ça ne veut pas dire la libération de la mémoire) même en cas d'exception.

    Donc si c'est un exercice d’école ben il va falloir que tu ait une petite discussion avec ton prof...
    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

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    Un exercice scolaire ou l'on doit implementer la method finalize ????

    Chelou ta/ton prof, il/elle ne doit pas avoir bcp d'experience en Java lol

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    pour des codes associés à la gestion de la vie des objets voir la doc du package java.lang.ref (mais c'est du niveau ceinture noire 1° Dan!)

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    pour des codes associés à la gestion de la vie des objets voir la doc du package java.lang.ref (mais c'est du niveau ceinture noire 1° Dan!)
    Cf. PhantomReference qui peuvent être utiles pour garantir que la mémoire liée à une référence à bien été recyclée par le GC.

    Mais en effet, finalize ne devrait jamais être utilisé. Même avant d'être dépréciée c'était déjà une mauvaise idée

  6. #6
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    pour une discussion sur la question voir également : http://scrountch.info/java/chunk/ch75.html

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

Discussions similaires

  1. [debutant] finally Exception
    Par Javamar dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2007, 17h09
  2. [FLASH] pb debutant
    Par ultrakas dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 00h48
  3. [debutant]Limiter le temps de saisi
    Par Nasky dans le forum C
    Réponses: 5
    Dernier message: 17/03/2003, 15h47
  4. Réponses: 3
    Dernier message: 09/02/2003, 01h09

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