[ALG2IR] Finalize() pas appelé ? (v2.0)

Voir le sujet précédent Voir le sujet suivant Aller en bas

[ALG2IR] Finalize() pas appelé ? (v2.0)

Message  jonas le Sam 05 Mar 2011, 14:04

Cette méthode finalize qui m’embêtaient déjà ici ne semble à nouveau pas appelée Sad Je pensais qu'elle était TOUJOURS appelé (notamment pour fermer un fichier ouvert).

La classe qui appelle l'objet à finalizer
Code:

public class TestMyTimer {

   public static void main(String[] args) {
      MyTimer myTimer = new MyTimer(250);
      myTimer.start();
      try {
         Thread.sleep(1010);
      } catch (InterruptedException e) {
         System.out.println("TestMyTimer: exception " + e);

      }
      myTimer.shouldRun = false;
      myTimer = null; //ajouté pour voir... mais on ne voit rien de plus
      System.gc();
      System.out.println("TestMyTimer: gc called");
      System.out.println("TestMyTimer: end");
   }

}

L'objet qui devrait passer par "finalize"
Code:

public class MyTimer extends Thread
{
   private int laps;
   public boolean shouldRun;
   
   public MyTimer (int laps)
   {
      this.laps = laps;
      shouldRun = true;
      System.out.println("C'est parti");
   }

   protected void finalize()throws Throwable
   {
      System.out.println("Tout est fini!");
      super.finalize();
   }

   public void run()
   {
      while(shouldRun)
      {
         try {
            sleep(laps/2);
            System.out.println("MyTimer: run");
            sleep(laps/2);      
         } catch (InterruptedException e) {
            System.out.println(e);
         }
      }
      
   }

}

RESULTAT (dans netBeans):
Code:
run:
C'est parti
MyTimer: run
MyTimer: run
MyTimer: run
MyTimer: run
TestMyTimer: gc called
TestMyTimer: end
MyTimer: run
GÉNÉRATION TERMINÉE (durée totale  2 secondes)

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

Re: [ALG2IR] Finalize() pas appelé ? (v2.0)

Message  nvs le Sam 05 Mar 2011, 17:28

selon la javadoc, finalize est appelé par le ramasse-miettes. donc, si n'est pas appelé dans ton code, c'est que le ramasse-miette n'entre pas en action avant sa fin. note que l'appel de la méthode gc ne fait que suggérer à la machine virtuelle de passer l'aspirateur...







What a Face

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum