garbage collector et finalize() Comment les utiliser ?
Bonjour,
voici mon programme :
Code:
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 30 31 32 33 34
|
public class Chien{
private String nom, aboiement;
private static int numero = 0 ;
private int numeroperso = 0 ;
public Chien(){
nom = "Toutou";
aboiement = "wouf";
numero++;
numeroperso = numero;
}
public Chien(String nom, String aboiement){
this.nom = nom;
this.aboiement = aboiement;
numero++;
numeroperso = numero;
}
public int getIdent(){
return numeroperso;
}
public int getIdentMax(){
return numero;
}
protected void finalize() throws Throwable{
if(this == null) // je ne suis pas sure du tout que ça doit commencer comme ca...
{}
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public class TestChien{
public static void main(String args[]){
Chien B = new Chien("Médor", "aaaa");
System.out.println(B.getIdent());
Chien C = new Chien("Bill", "waaaf");
Chien D = new Chien("Bill2", "waaaf2");
System.out.println(C.getIdent());
Chien A = new Chien();
System.out.println(A.getIdent());
System.out.println(B.getIdent());
System.out.println(C.getIdentMax());
A = B;
B = C;
D = null;
System.out.println(A.getIdent());
System.out.println(B.getIdent());
System.gc();
System.out.println(A.getIdent());
System.out.println(B.getIdent());
System.out.println(D.getIdent());
} |
J'utilise System.gc() pour obliger le programme à lancer le garbage collector. Je voulais tout d'abord savoir si le garbage collector sert bien à supprimer les objets (ou à libérer la case mémoire : quelle est la différence ?) qui sont null.
Quand je lance TestChien, il veut bien le compiler mais lors de l'exécution, il y a une erreur car c'est normal, D = null
Si j'ai bien compris, ma méthode finalize() se lance toute seule (pas besoin de l'appeler dans main) mais je ne sais pas quoi écrire dedans : est-ce qu'elle est bien sensée supprimer les objets ? Est-ce la même chose que le garbage collector ou un outil du garbage collector ?
Je dois aussi créer une variable et la/les méthode/s nécessaire/s pour savoir environ le nombre de chiens dans le programme.
Est-ce que mon objet Chien D est bien candidat au ramasse miette ? Comment savoir qu'il a été ramassé ?
Et aussi : à quoi sert protected ?
J'ai bien regardé les tutoriels mais je ne trouve pas de détails sur l'utilisation du ramasse miette.
Merci pour votre aide